正则表达式matches_正则表达式在VBA中间是如何应用?正则表达式的实现方式?...
Hi,大家好,本章節開始將會從零開始和大家用圖文的方式,讓你從零基礎學會正則表達式!有興趣的小伙伴可以持續關注我,或者在專欄中進行查看自我學習,愿與君攜手前行!
在上一個章節說到正則表達式的入門級知識點,本節將會與大家分享一下正則表達式的是具體實現方式是怎么樣的?
在繼續學習正則元字符特性或編制自己的正則表達式時,常常需要對其測試.也可以自己編制VBA代碼進行測試,這樣做的好處是可以提高在今后實際工作應用正則表達式的能力。所以,先介紹正則與VBA的交互的相關知識,讓你在VBA中間使用正則表達式游刃有余。當然你也可以快速閱讀或直接越過本章內容,在你以后的實際具體工作應用時,直接查閱即可。當然也可以用上一章學到的知識詳細研究本章內容,在以后的學習中專注于正則表達式本身.
正則處理文本,其實是通過正則表達式與程序設計語言的互相交互來實現。交互方式在不同編程語言中主要是分為三大類:
一是集成式。Perl語言本身內建正則操作符,可以直接作用于正則表達式.操作符作用于正則表達式就像數學的+-號作用于數字一樣.不需要構建正則對象。
二是函數式處理。Java等語言,為正則處理提供了一些便捷函數,以節省工作量.用戶不需要首先創建一個正則對象,而是用靜態函數提的臨時對象來完成正則處理,處理完后把臨時對象拋棄. 正則表達式對于函數相當于一個參數, 這種方式的優點是”隨手”可用,但不適宜在對時間要求很高的循環中使用.所以java也提供了下面講到的面向對象的程序式處理.
三是面向對象的程序式處理。這種方式是大多數編程語言的正則處理方式。VBA平臺采用的也是這種方式。面向對象的程序式處理方式,首先必須創建一個正則對象的實例,然后設置對象必要的屬性,最后用對象的方法來完成指定的任務。
在上一章知識點中,給出了一個用VBA刪除行尾空格的正則處理例子,它代表了一般的代碼框架模式,下面再看一看它的結構特點,并對每一部分的代碼段進行仔細的剖析,讓你充分了解正則表達式的應用。
Sub?test()Dim?regx,S$,Strnew$???????????????????????????????1.定義變量代碼段S=”正則表達式其實很簡單?????“???????????????????2.目標文本字串變量賦值代碼段Set?regx=createobject(“vbscript.regexp”)???3.創建正則對象代碼段Regx.pattern=”\s+$”??????????????????????????????4.設置正則對象的pattern屬性代碼段Regx.global=true????????????????????????????????????5.設置正則對象的其它屬性代碼段Strnew=regx.replace(s,””)???????????????????????????6.應用正則對象方法代碼段Msgbox?strnewEnd sub1.定義變量代碼段,就是定義常規數據類型和變量。
2.目標文本字符串賦值代碼段,目標文本,可能存在于文本文檔、Word文檔、HTML文檔或Excel文檔等文檔之中。正則對象并不能直接作用于這些文檔,只能作用于它們的副本。所以用VBA正則處理這些文檔,必須首先從這些文檔中讀出字符串并賦值于字符變量。如果任務是修改文本,那么,你可能需要編寫額外的代碼將修改后的文本字符串重新寫回原文檔中. 目標文本也可能分別存在于一個數組中,那么,你可能需要通過循環逐一處理.
3.創建正則對象代碼段,本處理的各種操作,都是通過操作正則對象來完成的.所以必須創建正則對象.VBA創建或聲明正則對象有兩方式:早期綁定和后期綁定,你可以根據自己喜好選擇其一:
早期綁定:?(需要在VBE--工具--引用中勾選Microsoft VBScript Regular Expressions 5.5)
后期綁定:
Dim regx AS RegExp
Set regx=new regexp (或dim regx as new regexp)
Set regex = CreateObject("VBScript.RegExp")
利用上述兩種方式創建或聲明正則對象,實際上是調用Microsoft VBScript腳本的regexp正則對象。Microssoft VBScript腳本,包含在Internet Eeplorer 5.5以及之后的版本中.該腳本中的正則表達式執行的是ECMA-262第3版所規定的標準,與JavaScript腳本中的正則執行標準是相同的。1.0版只是為了向后兼容的目的,功能很弱。
4.設置對象的pattern屬性
語法:object.pattern=”正則表達式”
Object是一個正則對象.
把自己編制的正則表達式,以字符串的形式賦值給pattern屬性。注意要用英文雙引號將正則表達式包圍起來.
并且要在對象名與屬性名之間用英文點號隔開.屬性名pattern是保留字,固定不變的,對象名是用戶自定義的。
5.設置對象的其它屬性
除Pattern屬性外,正則對象還有其它三個屬性,其屬性值有False和True,默認值都是False。如果要使用默認屬性,可以不用顯示設置;如果要改變默認屬性,則需要顯示設置:
Global ? ? ? ? ? ? ? 當屬性值為False時,只要在目標文本中,找到一個匹配時,即停止搜索。如果想要找出目標文本中的所有匹配,那么需要把它的屬性值設置為True。
IgnoreCase ? ? ? ?設置對英文字母大小寫是否敏感。默認值False, 對大小寫敏感;設置為True,忽略大小寫.
MultiLine ? ? ? ? ? ?它影響且只影響元字符^和$的意義。值為False,無論目標文本是多少行,整個文本中則只有一個開始位置,^表示第一行的開始;只有一個行結束位置,$表示文本末尾位置。值為True,那么,^和$分別表示每一行的行首和行尾位置。
下面來完成一個簡單的任務,再具體認識各屬性的使用方法:
有一兩行的文本:
Aaa
Bbb
任務要求:
1.在文本開始和結束處,分別插入一個”@”符號;
2.在文本每行的開始和行尾分別插入”@”符號。
使用的正則表達式:
^|$ ? ? ? ? ? 表示匹配行開始或結束位置
Test1中間顯示的結果為@AaaBbb@,test02中間顯示的結果為 @Aaa@@Baa@。
Test2代碼與test1代碼唯一區別是修改了mutiline默認屬性,設置為True。這就意為著,該文本的每一行都存在一個開始位置和結束位置。代碼1中修改了global的默認屬性值,設置為true;目的是保證能找到并替換全部的開始或結束位置。如果保持默認屬性,則只會在開始處插入一個@號。
正則對象Reg的其它兩個屬性保持為默認。因為本任務無關乎字母大小問題,所以IgnoreCase屬性無需要設置為Ture(當然如果設置為true,對最后結果也無影響);由于Mutiline屬性保持默認,其值為False,所以整個文本只有一個開始位置和一個結束位置。
6.應用對象的方法代碼段
VBScirpt正則對象的方法共有三個:你可以根據任務要求選擇使用一個或多個方法.
(1)TEST方法
語法:Object.Test(string)
Test方法只是簡單測試目標文本中,是否包含正則表達式所描述的字符串。如果存在,則返回True,否則返回False。
test方法的語法,在方法與正則對象之間也是用英文點號隔開,作為參數,目標字符串用英文括號包圍。
(2)Replace方法
替換在目標文本中用正則表達式查找到的字符串。
前面例子中語句體現其語法:s=reg.replace(s,”@”)
后面括號中的參數S,代表前面代碼中設置的目標文本字符串.也就是正則表達式將要作用的目標文本.”@”是用來替換的字符串參數.前面的s是Replace方法返回的結果,它是目標文本被替換后的一個副本. 如果沒有找到匹配的文本,將返回與目標文本一樣的一個副本.
(3)Execute方法
在目標文本中執行正則表達式搜索。
語法:set mh=object.execute(s)
其中mh是用戶自定的對象變量,S是值為目標文本的字符串變量.object是正則對象.Execute方法會作用于目標文本(S),并返回一個叫作"Matches"的集合對象,在這里是mh.在這個集合對象中包含它找到的所有叫做"Match"的成功匹配對象(Matches集合最多可容納65536個匹配對象). 如果未找到匹配,Execute 將返回空的 Matches 集合。Matches集合有兩個只讀屬性:索引(Item)和成功匹配的次數(Count).Matches集合中包含的匹配對象Match有四個只讀屬性:Value/firstindex/length/submatches。值得一提的是,Submatches屬性是一個集合屬性,集合中元素個數與正則表達式中使用的捕獲性括號的個數相同,每個元素的值就是括號包圍起來的內容.它也有兩個只讀屬性:item和Count
現在已經基本和大家闡述了正則表達式的基本思想,并和大家對正則在VBA中的實現作了詳細講解.接下來的時間我們將集中介紹VBA中可使用的全部元字符(序列),有的稱為元字符的"特性",有的叫作正則"語法".反正它的基本屬性就是用來描述字符的特殊字符.)
好啦!快樂的時間總是非常短暫的,又到了和大家說再見的時候,如果大家感覺本文如果對你有所幫助的話,請幫忙轉發點贊,謝謝您能觀看到現在,我們下期再見!
我是Excel教案,關注我持續分享更多的Excel技巧!
如果有不明白的或者不懂的可以在下方留言,我們會一一解答的。?
總結
以上是生活随笔為你收集整理的正则表达式matches_正则表达式在VBA中间是如何应用?正则表达式的实现方式?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python分析基金数据_python基
- 下一篇: 四线接近开关接线图_135张图!开关、电