代码之家  ›  专栏  ›  技术社区  ›  user3170702

词边界正则表达式问题

  •  3
  • user3170702  · 技术社区  · 9 年前

    我在使用单词边界方面有问题 \b 在我的正则表达式中。我正在使用R,但当我尝试时,问题也存在 http://regexr.com .我使用的模式是 \bs\.l\.\b ,虽然我希望下面的第1行和第3行匹配此模式,但只有第2行匹配:

    aaa s.l. bbb
    aaa s.l.bbb
    aaa s.l., bbb
    

    看见 http://regexr.com/3f154 也

    2 回复  |  直到 7 年前
        1
  •  5
  •   Wiktor Stribiżew    9 年前

    这个 word boundaries 在以下位置进行匹配:

    • 如果第一个字符是单词字符,则在字符串中的第一个字符之前。
    • 如果最后一个字符是单词字符,则在字符串的最后一个字符串之后。
    • 字符串中两个字符之间,其中一个是单词字符,另一个不是单词字符。

    现在,你想匹配 s.l. 前面有一个单词边界,后面没有一个单词char。您需要替换尾随 \b 用一个 (?!\w) 环顾四周:

    \bs\.l\.(?!\w)
    

    看 regex demo

    使用 perl=TRUE 如果您使用的是基R函数,那么它将在使用ICU正则表达式库的stringr函数中正常工作。

        2
  •  3
  •   Matthew Lundberg    9 年前

    . 不是单词字符,因此在 . 字符和空格或逗号。