2013-02-21 68 views
1

我在Excel 2012中使用VBA將單元格中的內容與正則表達式匹配,但它不起作用。如何使RegEx查詢只匹配整個字符串?

我運行下面的代碼:

Dim r1 As New RegExp 
r1.Pattern = "(.)(\s+)?((?:[a-z][a-z]+))(\s+)(\d+)?" 
r1.IgnoreCase = True 

For i = 1 To 5 
    If r1.Test(Sheet3.Cells.Item(i, 5)) = True Then 
     MsgBox ("MATCH: " & Sheet3.Cells.Item(i, 5)) 
    Else 
     MsgBox ("NOT MATCH: " & Sheet3.Cells.Item(i, 5)) 
    End If 
Next i 

所以應該匹配字符串:「一個人01」 但不匹配:「一個人ABC 01」

但它匹配兩個因爲expressin可以在字符串的後半部分找到。 你如何才能使它匹配整個字符串? 所以只有匹配,如果單元格的全部內容是:單個字母,空格,單詞,空格,數字

任何幫助非常感謝!

回答

2

你可以使用這個表達式

^[a-zA-Z]\s+\w+\s+\d+$ 

如果你想完全匹配您必須指定起始(^)和結束($)..

[a-zA-Z]一個字母匹配

\s+匹配1到很多空間

\w+匹配word..it類似於[a-zA-Z0-9_]+

\d+比賽1對多位數

+0

謝謝,沒有工作雖然。我嘗試了^。\ s +?[az] [az] +(\ s)(\ d +)$,但它不起作用,但在http://regexpal.com/中有效,如果您有「^ $ match line打破(米)「框打勾,我不知道這是什麼意思,或如何複製它在我的VBA代碼? – user2096512 2013-02-21 18:40:56

+0

@ user2096512將Multiline屬性設置爲True – Anirudha 2013-02-21 18:48:46

+0

好吧,讓它工作,在單元格中有一些前導空格,因此使用了Trim()函數。乾杯。 – user2096512 2013-02-21 19:10:50

相關問題