在 r 中使用 gsub 删除模式

Removing a pattern With gsub in r

我有一个字符串 Project Change Request (PCR) - HONDA DIGITAL PLATEFORM 保存在 supp_matches 中,supp_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"

为什么它没有按应有的方式出现?

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

你可以做类似gsub(paste0("^.*", supp_matches1), "", supp_matches)的事情来真正使用supp_matches1中包含的表达式,除了@rawr提到的,你的表达式中有括号所以你需要将它们转义.
得到你想要的东西的正确表达是 sub("Project Change Request \(PCR\) - ", "", supp_matches)

要得到你想要的,可以使用gsub(sub)函数的fixed参数,也就是说参数pattern中的表达式将按原样匹配(因此,无需转义任何内容,而且也没有真正的正则表达式)。

所以你要找的是:

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

@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"

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