如何在R中搜索带括号的字符串

时间:2019-05-16 18:43:15

标签: r string parentheses grepl

使用R,我有一长串要在数据集中搜索的关键字。其中一个关键字需要在其周围带有括号才能被包含。

我一直试图用\\代替关键字列表中的括号,然后用括号代替,但是没有成功。如果有一种方法可以修改grepl()函数以识别它们,那也将有所帮助。这是我要完成的工作的一个示例:

patterns<-c("dog","cat","(fish)")

data<-c("brown dog","black bear","salmon (fish)","red fish")

patterns2<- paste(patterns,collapse="|")

grepl(patterns2,data)

[1]  TRUE FALSE  TRUE  TRUE

我希望salmon (fish)TRUEred fishFALSE

谢谢!

2 个答案:

答案 0 :(得分:2)

@joran在评论中指出,该模式应如下所示:

patterns<-c("dog","cat","\\(fish\\)")

\\会告诉R在搜索模式时从字面上读取括号。

如果不想手动进行更改,最简单的方法:

patterns <- gsub("([()])","\\\\\\1", patterns)

这将导致:

[1] "dog" "cat" "\\(fish\\)"

如果您对正则表达式不是很熟悉,这里发生的是它会在方括号内查找任何一个字符。圆括号告诉它保存与内容匹配的所有内容。然后,第二个参数中的前四个斜杠告诉它用两个斜杠替换发现的内容(每个两个斜杠转换为一个斜杠),\\1告诉它添加从第一个参数保存的所有内容,即,()

答案 1 :(得分:1)

另一种选择是忘记正则表达式,并将greplfixed = T一起使用

rowSums(sapply(patterns, grepl, data, fixed = T)) > 0
# [1]  TRUE FALSE  TRUE FALSE