如果word位于字符串的开头,则VBA Excel正则表达式 - \ b字边界不匹配

时间:2012-08-08 15:09:22

标签: regex excel vba

我在excel中使用VBA正则表达式引擎来匹配从单词边界开始的单词(例如\babc)。

但是,如果单词位于字符串的开头,则不起作用。

一个选项是对字符串开头的匹配进行另一个比较(例如^abc)“。但是,这会使代码变得更复杂。是否有更好的解决方案?

3 个答案:

答案 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à-ÿÀ-Ÿ]|^|$)来限制单词的界限。在这里,您可以看到à-ÿÀ-Ÿ,它是文本中非拉丁符号的间隔。