我知道为了整个单词而不是它的一部分,你应该使用'\ b'。但是,我无法在文本中使用某个单词。见下文
> grep("£m","formal offer £m borussia dortmund captain mats hummels")
[1] 1
> grep("\\b£m\\b","formal offer £m borussia dortmund captain mats hummels")
integer(0)
答案 0 :(得分:0)
这基本上是Regular Expression Word Boundary and Special Characters的副本。我最初认为有一些关于£的“特殊性”正在弄乱正则表达式计算,但事实证明它不被认为是字母数字字符。 \b
代表单词(字母数字)字符和非单词字符之间的边界,因此如果£不是字母数字,则“£”不是非字母数字(“”)和字母数字字符之间的边界。 (链接的问题适用于“+”而非“£”,但逻辑相似。)
让我们测试一下:
grep("\\w","£")
## integer(0)
grep("[[:alnum:]]","£") ## equivalent
## integer(0)
grep("\\W","£") ## search for not-word character ("[^[:alnum:]]")
## 1
@akrun指出,如果你想要,你可以寻找空格字符:
v <- "formal offer £m borussia dortmund captain mats hummels"
grep("\\s£m\\s",v)
## 1
最准确地说,您可以在搜索集中明确包含£:
grep("[^[:alnum:]£]£m[^[:alnum:]£]",v)
但是那很难看,而且我认为它没有正确地匹配开头/结尾(我还没有测试过)。也许正则表达式专家可以告诉你如何更干净地做到这一点。