我在正则表达式中使用单词边界\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。
答案 0 :(得分:5)
word boundaries匹配以下位置:
- 在字符串中的第一个字符之前,如果第一个字符是单词字符。
- 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
现在,您希望匹配前面带有单词边界的s.l.
,而不是单词char。您需要使用\b
外观替换尾随的(?!\w)
:
\bs\.l\.(?!\w)
请参阅regex demo
如果您正在使用基本R函数,请使用perl=TRUE
,它将在使用ICU正则表达式库的字符串函数中工作。
答案 1 :(得分:2)
.
不是单词字符,因此.
字符与空格或逗号之间没有单词边界。