单词边界正则表达式问题

3

我在使用正则表达式中的单词边界\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个回答

5

单词边界匹配在以下位置:

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

现在,您想要匹配以单词边界为前导且没有跟随单词字符的s.l.。您需要将尾随的\b替换为(?!\w)查找:

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

查看正则表达式演示

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


3

. 不是一个单词字符,所以在 . 字符和空格或逗号之间没有单词边界。


谢谢,我没有考虑到那个。 - user3170702

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接