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

How to search for strings with parentheses in R

使用 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

谢谢!

正如@joran 在评论中指出的那样,模式应如下所示:

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

\s 将告诉 R 在搜索模式时逐字阅读括号。

如果您不想手动进行更改,实现此目的的最简单方法:

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

这将导致:

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

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

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

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