【问题标题】:Removing a pattern With gsub in r在 r 中使用 gsub 删除模式
【发布时间】:2015-07-07 11:22:05
【问题描述】:

我有一个字符串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"

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

【问题讨论】:

  • 您可以为supp_matchessupp_matches1dput 添加简单的赋值语句吗?
  • 在您的表达式中,您要求删除字符串开头的任何字符 0 次或多次,然后是括号之间的一个字母(您可以尝试删除对象 @ 987654330@ 和 gsub("^.*[supp_matches1]","",supp_matches) 你会得到完全相同的结果。
  • gsub(sprintf("^.*%s", supp_matches1), "", supp_matches) 并且您还需要转义 supp_matches1 中的括号,但如果您描述您正在寻找的模式会更好,- 之后的所有内容?而不是使用这种方法
  • supp_matches1 是一个变量 @rawr ,在这种情况下,应该在 "-" 之后删除字符,但是 supp_matches1 中的字符串会发生变化。所以我想从 supp_matches 中删除变量字符串。
  • 我该如何处理 dput ? @hrbrmstr,不知道。

标签: regex r gsub stringr


【解决方案1】:

正如我在评论中所说,在您的表达式 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,我得到了我想要的东西,是的,我的代码没有使用“supp_matches1”作为对象。现在解决了。
【解决方案2】:

@cathG 已经提供了一个固定 = 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"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-28
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多