我试图尝试使用正则表达式在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个数字等等。
帮助!
答案 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位数字。