如何将字符串中的确切单词与正则表达式匹配?

时间:2015-08-05 08:42:20

标签: regex vba

我一直在努力寻找解决听起来像一个简单问题的方法。

我需要在文本字符串中找到单词“HYD”(大写字母)。我需要确切匹配。为了澄清,任何包含“HYD”但不相等的单词/文本都应该匹配。例外是空格和符号。


在以下示例中查找:
text1 HYD text2
文本1,HYD.text2

在以下示例中忽略:
text1 HYDROtext2
text1 MYHYD text2

我能得到的最接近的是以下模式:

  

objRegEx.Pattern =“[^ a-z] HYD [^ a-z]”

问题在于,如果字符串以字符串开头或结尾,它将找不到“HYD”。

4 个答案:

答案 0 :(得分:2)

您甚至不需要RegExp对象 - VBA的本地Like运营商可以处理此问题:

Const allowedSymbols As String = " ,.\/\-"

If myText Like "*[" & allowedSymbols & "]HYD[" & allowedSymbols & "]*" Then
    Debug.Print "Found"
Else
    Debug.Print "Not Found"
End If

如果您在正则表达式中绝对出售,则使用此模式:

(^|\b)HYD\b

MultiLineGlobal设置为True - 此模式将匹配空格和符号,但如果" HYD"是字符串中的第一个单词:

'// These will all match:
text1 HYD text2 
text1,HYD.text2
HYD test1

答案 1 :(得分:1)

我已经使用下面的正则表达式进行了测试,并得到了您似乎需要的结果:)

/*HYD/*

我已经通过http://regexpal.com/

进行了测试

- 编辑:

您正在寻找的真正答案(我认为)是https://stackoverflow.com/a/18936642/3462988

那里提到的模式选择包含HYD的整个单词。 \b(?=\w*[HYD])\w+\b

答案 2 :(得分:1)

来自评论:

为您的解决方案使用\b字边界标记:

objRegEx.Pattern = "\bHYD\b"

只会打到整个值为HYD的字符串,而不是其中包含其他字符的HYD的字符串。

答案 3 :(得分:0)

使用InStr(s, "HYD")代替:InStr是VBA中的语言关键字,这种方法比使用正则表达式更快。<​​/ p>

这将返回"HYD"中第一次出现String s的位置,如果未包含"HYD",则返回0。