VBA Like 运算符/正则表达式

问题描述 投票:0回答:2

在VBA中,匹配以下每个字符串的正则表达式是什么:

56-...
...-28

对于第二个,我尝试了以下方法,但没有成功:

Target.Value Like "[\.]{3}[\-]{1}[0-9]{1,}"
excel regex vba
2个回答
0
投票

请尝试一下。

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

0
投票

您似乎像普通正则表达式一样使用 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]#*"
© www.soinside.com 2019 - 2024. All rights reserved.