在VBA中,匹配以下每个字符串的正则表达式是什么:
56-...
和...-28
?
对于第二个,我尝试了以下方法,但没有成功:
Target.Value Like "[\.]{3}[\-]{1}[0-9]{1,}"
请尝试一下。
Option Explicit
Sub demo()
Dim sTxt As String, oMatch As Object
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "\d+-\.{3}"
sTxt = "the frist one 56-..."
For Each oMatch In .Execute(sTxt)
Debug.Print oMatch.Value
Next
.Pattern = "\.{3}-\d+"
sTxt = "For the second one...-28"
For Each oMatch In .Execute(sTxt)
Debug.Print oMatch.Value
Next
End With
End Sub
输出:
56-...
...-28
您似乎像普通正则表达式一样使用 VBA“正则表达式”。这是行不通的:VBA 中的 like 运算符采用的表达式与正则表达式不同,并且与正则表达式相比非常有限。这是参考。
仅供参考,与第二个字符串匹配的操作数是
"...-##*"
(3 个点、1 个连字符、1 个数字,然后是任意数量的数字);正如您所看到的,这与正则表达式非常不同。"...-[1-9]#*"
(3 个点、1 个连字符、1 位数字(除了 0 之外的任意数字)。
在 VBA 中使用正则表达式可以通过向
Microsoft VBScripts Regular expressions 5.5
添加引用(菜单工具)来完成。
对于您问题中的情况,这似乎太过分了,并且引入了很多额外的代码。Target.Value Like "##*-..." OR Target.Value Like "...-##*"
'Or
Target.Value Like "[1-9]#*-..." OR Target.Value Like "...-[1-9]#*"