前面章節我們見識了正則表示式中元字元的強大,但有時候我們想要匹配的字串有長度的要求,正則表示式中的量詞就是專門為解決這個問題而生的。
正則表示式中的量詞如下:
? 匹配前面的子表示式零次或一次。
+ 匹配前面的子表示式一次或多次。
* 匹配前面的子表示式零次或多次。
{n}n 是一個非負整數。匹配確定的n次。
{n,} n是一個非負整數。匹配確定的n次。
{n,m} n和m均為非負整數,其中n<=m。匹配前面子表示式最少n次,最多m次。
我們透過具體的案例來體會下:
案例一:
圖中B列資料姓名之間有的有換行符,有的沒有,有的有多個換行符,有的只有一個,我們希望把他梳理成右邊的格式。
我們只要匹配出每個單元格中的漢字,至少兩個字,因為姓名之間有換行符,所以用"\S{2,}"就能匹配出每個姓名來。
程式碼如下:
Sub 規範格式()
Dim regx As Object, mat, n%, k, rng
Set regx = CreateObject("vbscript.regexp")
With regx
.Global = True
.Pattern = "\S{2,}"
For Each rng In [b2:b5]
Set mat = .Execute(rng)
For Each k In mat
n = n + 1
Cells(rng.Row, n + 2) = k
Next
n = 0
Next
End With
End Sub
當然我們也可以寫成.Pattern = "\S+"。
案例二:
把原資料中的“-”統一成兩個。
匹配“-”至少兩次
程式碼如下:
Sub 規範格式1()
Dim regx As Object, rng
Set regx = CreateObject("vbscript.regexp")
With regx
.Global = True
.Pattern = "-{2,}"
End With
For Each rng In [a2:a7]
Cells(rng.Row, 2) = regx.Replace(rng.Value, "--")
Next
End Sub
案例三:
這是前幾天一位群友問我的問題,把原資料中連續的8位數字提取出來。
程式碼如下:
Sub 規範格式2()
Dim regx As Object, mat, n%, k, rng
Set regx = CreateObject("vbscript.regexp")
With regx
.Global = True
.Pattern = "\d{8}"
For Each rng In [a2:a5]
Set mat = .Execute(rng)
For Each k In mat
n = n + 1
Cells(rng.Row, n + 1) = k
Next
n = 0
Next
End With
End Sub
透過上面三個例子,大家應該多量詞有所瞭解了吧!
轉自:米宏Office