我在excel中使用VBA正则表达式引擎来匹配从单词边界开始的单词(例如\babc
)。
但是,如果单词位于字符串的开头,则不起作用。
一个选项是对字符串开头的匹配进行另一个比较(例如^abc
)“。但是,这会使代码变得更复杂。是否有更好的解决方案?
答案 0 :(得分:3)
你可以使用交替吗?
(?:\b|^)abc
<强>更新强>
至少在Excel 2010中,\b
按预期工作。
Sub test()
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "\babc"
MsgBox re.test("abc")
re.Pattern = "^abc"
MsgBox re.test("abc")
re.Pattern = "(?:\b|^)abc"
MsgBox re.test("abc")
End Sub
以上为我输出True,True,True。
答案 1 :(得分:1)
我不确定为什么这在VBA中不起作用。在任何正则表达式实现中,我看到\ b在字符串的开头也匹配字边界。
也许你可以尝试这样的事情:(?:^|\b)abc
答案 2 :(得分:0)
VBA Regex似乎仅适用于非Unicode文本。如果您在文本中使用非拉丁Unicode符号,则\b
组合不是很好的选择。
作为解决方法,您可以只使用(?:[^a-zA-Z0-9à-ÿÀ-Ÿ]|^|$)
来限制单词的界限。在这里,您可以看到à-ÿÀ-Ÿ
,它是文本中非拉丁符号的间隔。