首頁>科技>

為了匹配各種型別的字元,正則表示式中引入了元字元,為了解決匹配字元的個數,引入了量詞,有時需要匹配單個字元,有時需要把字串作為一個整體來匹配,所以我們還要學習一下分組。

如: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

5
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • EXCEL正則表示式之量詞