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

use*_*345 5 string r 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
Run Code Online (Sandbox Code Playgroud)

我愿意salmon (fish)付出TRUE,也red fish愿意付出FALSE

谢谢你!

iod*_*iod 9

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

patterns<-c("dog","cat","\\(fish\\)")
Run Code Online (Sandbox Code Playgroud)

s\\将告诉 R 在搜索模式时按字面意思读取括号。

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

patterns <- gsub("([()])","\\\\\\1", patterns)
Run Code Online (Sandbox Code Playgroud)

这将导致:

[1] "dog" "cat" "\\(fish\\)"
Run Code Online (Sandbox Code Playgroud)

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

  • 一个很好的答案,可以无耻地插入`fortunes::fortune(365)`。 (4认同)