R中的grepl:虚假匹配尽管内部短划线

时间:2015-01-29 14:41:51

标签: r grepl

下面的

是一个可重复性最小的例子:

v=c("\\<skill-saw\\>","\\<saw blade\\>")
text="xx placed his hand beneath skill-saw blade"
sapply(v,grepl,text)

最后一个命令返回c(TRUE,TRUE),我期待c(TRUE,FALSE)。有关如何实现这一点的任何想法?我们的想法是关键字&#34;技能 - 见&#34;应该检测到文本中存在,但不是关键字&#34;锯片&#34; ...

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以尝试regex lookbehind

v <- c('(?<= )\\bskill-saw\\b', '(?<= )\\bsaw blade\\b')
 unname(sapply(v, grepl, text, perl=TRUE))
 #[1]  TRUE FALSE

更新

基于新的&#34;文字&#34;,可能是

text1 <- "xx placed his hand beneath skill saw-blade"

v <- c('(?<= )\\bskill-saw\\b', '(?<= )\\bsaw-?blade\\b')
unname(sapply(v, grepl, text1, perl=TRUE))
#[1] FALSE  TRUE