删除模式使用r中的gsub

时间:2015-07-07 11:22:05

标签: regex r gsub stringr

我在Project Change Request (PCR) - HONDA DIGITAL PLATEFORM中保存了一个字符supp_matchessupp_matches1包含字符串Project Change Request (PCR) -

supp_matches2 <- gsub("^.*[supp_matches1]","",supp_matches)
supp_matches2
# [1] " (PCR) - HONDA DIGITAL PLATEFORM"

哪个实际上不正确,但应该是

supp_matches2
# [1] "HONDA DIGITAL PLATEFORM"

为什么它不应该以应有的方式出现?

2 个答案:

答案 0 :(得分:3)

正如我在评论中所说,在你的gsub("^.*[supp_matches1]", "", supp_matches)表达式中,你并没有真正使用对象supp_matches1,而只使用其中的字母。

您可以执行类似gsub(paste0("^.*", supp_matches1), "", supp_matches)的操作来真正使用supp_matches1中包含的表达式,除非@rawr提到,您的表达式中有括号,因此您需要将它们展开。<登记/> 获得所需内容的正确表达式为sub("Project Change Request \\(PCR\\) - ", "", supp_matches)

要获得您想要的内容,您可以使用fixedgsub)函数的sub参数,该参数表示参数pattern中的表达式将为原样匹配(所以,不需要逃避任何东西,但也没有真正的正则表达式。)

那么你在寻找的是:

gsub(supp_matches1, "", supp_matches, fixed=TRUE) # or just with `sub` in this case
#[1] "HONDA DIGITAL PLATEFORM"

答案 1 :(得分:3)

@cathG已经提供了一个fixed = TRUE的答案。如果你想用正则表达式做所有事情,那么你可以试试这个。

> w1 <- "Project Change Request (PCR) - HONDA DIGITAL PLATEFORM"
> w2 <- "Project Change Request (PCR) - "
> sub(paste0("^", gsub("(\\W)", "\\\\\\1", w2)), "", w1)
[1] "HONDA DIGITAL PLATEFORM"

它只是一种转义在你想要用作子函数中第一个参数的变量中的所有特殊字符。