為了匹配各種型別的字元,正則表示式中引入了元字元,為了解決匹配字元的個數,引入了量詞,有時需要匹配單個字元,有時需要把字串作為一個整體來匹配,所以我們還要學習一下分組。
如:abc{2,} 與 (abc){2,}是完全不同的兩個匹配。
abc{2,},表示匹配abc,最後那個c出現至少兩次,所以匹配出來的是abcc,abccc,abcccc,……
(abc){2,},把abc當作一個整體來匹配,至少出現兩次,匹配出來的是abcabc,abcabcabc,……
所以,在正則表示式中可以用()來進行分組,解決單個與整體的問題。
另外正則表示式中用“|”來表示或者的關係,比如,a|b,表示匹配a或者是b。
下面我們透過具體的案例來體會下上面所講的內容。
案例一:
凡是兩個VBA連在一起的保留一個VBA即可,不區分大小寫。
程式碼如下:
Sub 去除重複()
Dim regx As Object
Set regx = CreateObject("vbscript.regexp")
With regx
.Global = True
.ignorecase = True '不區分大小寫,false則區分大小寫
.Pattern = "(VBA){2,}"
[b1] = .Replace([a1], "VBA")
End With
End Sub
本案例中VBA就作為一個整體進行匹配,所以用括號。另外我們還學習到了如何區分大小寫,ignorecase = True '不區分大小寫,false則區分大小寫。
案例二:
把經理或者是總監替換為高管。
程式碼如下:
Sub 替換()
Dim regx As Object, rng As Range
Set regx = CreateObject("vbscript.regexp")
With regx
.Global = True
.Pattern = "總監|經理"
For Each rng In [a2:a9]
Cells(rng.Row, 2) = .Replace(rng, "高管")
Next
End With
End Sub
本例中我們練習的是正則表示式中或的表達。
案例三:
篩選以上海或者北京開始,一辦或者三辦結束的內容。
程式碼如下:
Sub 篩選()
Dim regx As Object, rng As Range, mat, n, m
Set regx = CreateObject("vbscript.regexp")
With regx
.Global = True
.Pattern = "(上海|北京).*(一辦|三辦)"
For Each rng In [a2:a28]
Set mat = .Execute(rng)
For Each m In mat
n = n + 1
Cells(n + 1, 2) = m
Next
Next
End With
End Sub
.Pattern = "(上海|北京).*(一辦|三辦)",(上海|北京)這個很好理解,北京或者上海,中間的點號是元字元,. 匹配除"\n"之外的任何單個字元,星號是量詞,* 匹配前面的子表示式零次或多次,點號和星號結合就表示任意零個或者是單個或者是多個字元,後面的表示一辦或者三辦結束。
透過上面三個例子,我們可以感受到,元字元,量詞,分組結合在一起,可以實現很強大的匹配功能。
轉自:米宏Office