当RegEx不匹配时获得“TRUE”?

时间:2013-05-13 23:09:57

标签: regex excel vba excel-vba

我试图尝试使用正则表达式在VBA中进行模式匹配。我添加了对正则表达式库的引用,并使用以下代码作为测试。

Sub testing()

Dim re
Dim val
Set re = New RegExp

re.Pattern = "[0-9]{5}"
re.IgnoreCase = True

val = Range("A8").Value

MsgBox val

MsgBox re.Test(val)

End Sub

问题在于,当我测试格式为:

的字符串时

1234 565 4444543 12 33

我使用{5}时收到“True”,使用{6}时收到“False”。这是为什么?

在这种情况下,{5}和{6}不应该都返回“False”吗?

如果RegEx在空格上匹配,我该如何防止这种情况?我想精确匹配4个数字,然后恰好是一个空格,然后恰好是3个数字等等。

帮助!

2 个答案:

答案 0 :(得分:0)

  

我想准确匹配4个数字,后跟一个空格   接着是3个数字等等。

re.Pattern = "[0-9]{4} [0-9]{3}"

这将匹配您在行中任何地方描述的模式。如果你想说这是你需要做的唯一的事情:

re.Pattern = "^[0-9]{4} [0-9]{3}$"

或者匹配以特定数字开头的整行,您可以这样做:

re.Pattern = "^[0-9]{4} [0-9]{3}.*$"

如果您有一些想要帮助匹配的示例输入,请粘贴它,并准确描述您想要匹配的内容。

答案 1 :(得分:-1)

你需要锚定你的正则表达式:

re.Pattern = "^[0-9]{5}$"

否则,如果在输入中的任何位置找到模式,则匹配。 ^匹配输入的开头,$匹配输入的结尾。

我不确定为什么[0-9]{6}会根据您的输入返回False,因为4444543中有6位数字。