我一直在努力寻找解决听起来像一个简单问题的方法。
我需要在文本字符串中找到单词“HYD”(大写字母)。我需要确切匹配。为了澄清,任何包含“HYD”但不相等的单词/文本都应该不匹配。例外是空格和符号。
在以下示例中查找:
text1 HYD text2
文本1,HYD.text2
在以下示例中忽略:
text1 HYDROtext2
text1 MYHYD text2
我能得到的最接近的是以下模式:
objRegEx.Pattern =“[^ a-z] HYD [^ a-z]”
问题在于,如果字符串以字符串开头或结尾,它将找不到“HYD”。
答案 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
将MultiLine
和Global
设置为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。