grep with or和fixed

时间:2014-01-06 07:02:04

标签: r grep

实际上我试图grep不同的文件名,但是因为括号而不能使用grep,而它适用于匹配

 match("248465_abc_S(R).doc",Role[,"Name.of.file"])
   [1] 9
   grep("248465_abc_S(R).doc",Role[,"Name.of.file"])
   integer(0)

因为我有不同的格式,如doc,docx所以我不能使用匹配,我使用 fixed = T ,它使用单个名称但不使用 OR

grep("248465_abc_S(R)",Role[,"Name.of.file"],fixed = TRUE)
[1] 9
grep(paste(names,collapse="|"),Role[,"Name.of.files"]) #some names still missing because of brackets
[1]  6 11 14 17 26 27 28
grep(paste(names,collapse="|"),Role[,"Name.of.files"],fixed = TRUE)
integer(0)

修改

paste(name,collapse="|")
[1] "115457_dfm(R)|248465_sdj_S(R)[1]|248471_sdjb(R)[1]|28837_FS
grep(paste(gsub("]","\\]",gsub("[","\\[",gsub(".","\\.",gsub(")","\\)",gsub("(","\\(",name,fixed=T),fixed=T),fixed=T),fixed=T),fixed=T),collapse="|"),Role[,"Name.of.files"])
[1]  6  9 10 11 12 14 17 18 20 21 22 26 27 28

而不是识别要转义的每个角色,而不是更好的方法,谢谢。

1 个答案:

答案 0 :(得分:1)

match获取实际值以进行搜索。 grep采用regex模式进行搜索。 ()在正则表达式中具有特殊含义。 要在模式中使用括号,您需要使用\\来转义它们。同样适用于.

尝试下面的内容,看看这是不是你想要的。

grep("248465_abc_S\\(R\\)\\.doc",Role[,"Name.of.file"])