2013-02-21 54 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

相关问题