考虑以下示例:
> testLines <- c("I don't want to match this","This is what I want to match")
> grepl('is',testLines)
> [1] TRUE TRUE
但我想要的只是匹配'是',当它单独作为一个单词时。从阅读一些perl文档来看,似乎这样做的方法是使用\ b,一个锚点,可用于识别模式前后的内容,即\ bword \ b匹配'word'但不匹配'sword ”。所以我尝试了以下示例,使用Perl语法设置为'TRUE':
> grepl('\bis\b',testLines,perl=TRUE)
> [1] FALSE FALSE
我正在寻找的输出是FALSE TRUE
。
答案 0 :(得分:28)
“\&LT;”是一个单词开头的另一个转义序列,“\&gt;”结束了。 在R字符串中,您需要加倍反斜杠,所以:
> grepl("\\<is\\>", c("this", "who is it?", "is it?", "it is!", "iso"))
[1] FALSE TRUE TRUE TRUE FALSE
请注意,这匹配“是!”但不是“iso”。
答案 1 :(得分:18)
你需要双重转义才能将转义传递给正则表达式:
> grepl("\\bis\\b",testLines)
[1] FALSE TRUE
答案 2 :(得分:6)
非常简单,匹配领先的空间:
testLines <- c("I don't want to match this","This is what I want to match")
grepl(' is',testLines)
[1] FALSE TRUE
正则表达式还有很多,但基本上模式需要更具体。在更一般的情况下,您需要的是一个很大的主题。见?正则表达式
适用于此示例的其他可能性:
grepl(' is ',testLines)
[1] FALSE TRUE
grepl('\\sis',testLines)
[1] FALSE TRUE
grepl('\\sis\\s',testLines)
[1] FALSE TRUE