字边界和边缘之间的正则表达式差异

时间:2016-03-23 16:13:07

标签: regex r word word-boundary

regex的R帮助文件说

  

符号\<和\>分别匹配空字符串   一个词的开头和结尾。符号\ b与空字符串匹配   一个词的边缘

结尾和(单词)边缘有什么区别?

1 个答案:

答案 0 :(得分:3)

\b\< / \>之间的区别在于\b可用于PCRE正则表达式模式(当您指定perl=TRUE时)和ICU正则表达式模式( stringr 包)。

> s = "no where nowhere"
> sub("\\<no\\>", "", s)
[1] " where nowhere"
> sub("\\<no\\>", "", s, perl=T) ## \> and \< do not work with PCRE
[1] "no where nowhere"
> sub("\\bno\\b", "", s, perl=T) ## \b works with PCRE
[1] " where nowhere"

> library(stringr)
> str_replace(s, "\\bno\\b", "")
[1] " where nowhere"
> str_replace(s, "\\<no\\>", "")
[1] "no where nowhere"

\<(始终代表单词的开头)和\>(总是匹配单词的结尾)的优点是它们是明确的。 \b可能会匹配两个位置。

还需要考虑的另一件事(refrence):

  

gsub和gregexpr的POSIX 1003.2模式在重复的字边界(例如pattern = "\b")下无法正常工作。使用perl = TRUE进行此类匹配(但对于非ASCII输入可能无法正常工作,因为'word'的含义取决于系统)。