首頁>科技>

前面章節我們見識了正則表示式中元字元的強大,但有時候我們想要匹配的字串有長度的要求,正則表示式中的量詞就是專門為解決這個問題而生的。

正則表示式中的量詞如下:

? 匹配前面的子表示式零次或一次。

+ 匹配前面的子表示式一次或多次。

* 匹配前面的子表示式零次或多次。

{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

10
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 曾經的安卓之王風光不再,都以為倒下了,其實早已低調成全球第一