使用 Like 和通配符的 VBA 字符串搜索

hor*_*_vr 1 excel vba

我正在使用Like运算符进行模式搜索。这是我到目前为止想出的:

if MyString Like "*sometext?" + "_*" then
    debug.print "Match found!" 
else
    debug.print "Not a match"
Run Code Online (Sandbox Code Playgroud)

我需要这个来匹配只有当之间的字符sometext_一个数字(只有一个单一的数字,没有字母)。例如:

MyString='testingsometext3_whatever' 应该是一场比赛

MyString='testingsometext321_whatever' 不应该是匹配的(有 3 位数字,而不仅仅是一位)

MyString='testingsometext_whatever'不应该是匹配项,因为text和之间没有字符_

MyString='testingsometexts_whatever'不应该是匹配项(text和之间至少有一个字母数字_) -目前这对我不起作用,我需要帮助

K.D*_*ᴠɪs 7

虽然正则表达式可能有点矫枉过正,但我​​发现它更容易使用。

试试下面的代码:

With CreateObject("VBScript.RegExp")
    .Pattern = "testingsometext\d_whatever"
    If .Test(MyString) Then
        debug.print "Match found!" 
    else
        debug.print "Not a match"
    End If
End With
Run Code Online (Sandbox Code Playgroud)

打破模式

这个模式其实很简单。

  • testingsometext 匹配文字字符串
  • \d 匹配任何一位数字
  • _whatever 匹配文字字符串

重要事项 请牢记!

这也将匹配blahtestingsometext1_whateverblah,因为没有字符串锚点的开始/结束。

我为您走这条路线是因为您在模式 ( *sometext?_*) 的两端放置了星号,并假设这是需要的。如果这不是所需的行为,并且只想匹配字符串前后没有任何内容的确切短语,则将模式行更改为:
.Pattern = "^testingsometext\d_whatever$"

  • 如果不是更容易使用,那么肯定是更灵活和便携。 (3认同)