【问题标题】:Regular expression in Excel VBA to perform exact matchExcel VBA中的正则表达式执行精确匹配
【发布时间】:2021-03-19 13:11:50
【问题描述】:

所以,我从 Excel 中的单元格中获取文本,然后在该文本中搜索特定短语。现在,只有当它是完全匹配的单词时,我才需要返回 true。 例如如果文本是“The Quick brown fox jumped over the lazy dog”并且我正在搜索“Qui”,它应该返回 false,但如果我搜索“Quick”,它应该返回 true。 同样,“brown Quick”应该返回 false,“Quick brown”应该返回 true。

所以,我尝试在 VBA 中使用正则表达式并提出了

 With regex
    .Pattern = " *" & search & " *"
 End With

使用此代码我无法生成所需的输出。我需要检查搜索短语之前的字符是空格还是什么都没有,搜索短语末尾的字符也是空格还是什么都没有。请帮助我。

【问题讨论】:

  • 您也可以只使用Like 运算符,例如:Debug.Print str Like "* " & search Or str Like search & " *" Or str Like "* " & search & " *" 其中str 是要评估的字符串。
  • 我试过这个Debug.Print (text Like "* " & search & " *"),它在要评估的文本开头或结尾的搜索短语失败。
  • 这取决于您用作text 变量的内容。如果我是你,我会在声明变量时连接前导空格和尾随空格。在这种情况下,Like 将按预期执行。这意味着您还可以摆脱所有 Or 语句。

标签: excel regex vba search vba6


【解决方案1】:

试试这样:

Public Function TestRegex(str As String)
    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
    
    With RegEx
        .Pattern = "\b" & str & "\b"
        .Global = True
    End With
    
    TestRegex = RegEx.Test("The Quick brown fox jumped over the lazy dog")
End Function

结果:

?TestRegex("Qui")
False

?TestRegex("Quick")
True

?TestRegex("brown Quick")
False

?TestRegex("Quick brown")
True

通过使用单词边界 (\b),您可以在正则表达式模式中指定要搜索完整的单词。

【讨论】:

  • \b 会很好,请参阅this。您解释中的链接答案也表明没有区别,您可以放弃ancors。
  • 您好,它在不同版本的 Excel 上可能表现不同。请点击链接了解更多信息。
  • @sbgib 这个答案不正确。 \bThis 将始终匹配 This is it 中的 This,刚刚在 VBA 中测试过。
  • @WiktorStribiżew,完成。我敢肯定,最初的问题源于一个错字。
  • 好的,我已经简化了答案。我对此没有偏好,我只是试图确保它适用于具有未知 Excel 版本的 OP。
猜你喜欢
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
相关资源
最近更新 更多