使用R中的grepl完成单词匹配

时间:2011-06-29 23:02:47

标签: regex r grepl

考虑以下示例:

> 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

3 个答案:

答案 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