我在正则表达式中使用单词边界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。
单词边界在以下位置匹配:
- 在字符串中的第一个字符之前,如果第一个字符是单词字符。
- 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
- 在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
现在,您希望匹配前面有单词边界而不是后跟单词字符s.l.
。您需要将尾随b
替换为(?!w)
查看:
bs.l.(?!w)
查看正则表达式演示
如果您使用的是基本 R 函数,请使用 perl=TRUE
,它将在由 ICU 正则表达式库提供支持的字符串函数中按原样工作。
.
不是单词字符,因此.
字符与空格或逗号之间没有单词边界。