【问题标题】:replace a string pattern in r替换 r 中的字符串模式
【发布时间】:2021-02-04 00:38:24
【问题描述】:

我知道有很多关于正则表达式的问题,我的问题会在某个地方得到解答。但我找不到正确答案。

我只是想删除一个简单的字符串模式。如果在单词“AA”之后和“,”之前有任何数值或带有符号的数值,我想删除它们。例如,

tmp1= "B1, AA1~11, B22"
tmp2 = "AA2, 13, C1"
tmp3 = "1, 2, 3, AA-3"

我想要的输出是

tmp1= "B1, B22"
tmp2 = "13, C1"
tmp3 = "1, 2"

这是我尝试过的

str_replace_all(tmp1,"(AA)(\\d+)((?=,)",replacement= "")

【问题讨论】:

  • tmp2 示例AA2 中没有符号tmp3 示例AA-3,之后它没有任何,
  • 为什么是tmp3的输出,去掉3,
  • @Shinh,已更新。谢谢

标签: r regex stringr


【解决方案1】:

您的示例非常令人困惑,但这样的事情应该可以工作:

tmp1= "B1, AA1~11, B22"
tmp2 = "AA2, 13, C1"
tmp3 = "1, 2, 3, AA-3"

f = function(x){
    gsub('AA[^A-Za-z ]*?', '', x, perl=T)
}

> f(tmp1)
[1] "B1,  B22"
> f(tmp2)
[1] " 13, C1"
> f(tmp3)
[1] "1, 2, 3, AA-3"

如果您想删除 tmp2 中的尾随空格和 tmp3 中的尾随 AA-3,那么可能:

f = function(x){
    gsub('AA[^A-Za-z ]*[,$]* ?', '', x)
}

> f(tmp1)
[1] "B1, B22"
> f(tmp2)
[1] "13, C1"
> f(tmp3)
[1] "1, 2, 3, "

但为了获得更好的反馈,你真的应该投入更多的时间来制作更好的示例。

【讨论】:

    【解决方案2】:

    我不知道为什么 3 从 tmp3 的输出中删除,但这里是 subtrimws 的尝试。

    trimws(sub('AA.*?(,|$)', '', c(tmp1, tmp2, tmp3)), whitespace = '[,|\\s]')
    #[1] "B1,  B22" "13, C1"   "1, 2, 3" 
    

    使用sub,我们删除以'AA' 开头的字符,直到字符串的逗号或结尾。使用trimws 删除剩余的逗号和空格。

    【讨论】:

      【解决方案3】:

      假设要删除任何包含 AA 的非空格字符序列,使用 scan 拆分字段,使用 grep 删除带有 AA 的字段,然后使用 toString 将其重新组合在一起。

      stripAA <- function(x) {
        if (length(x) > 1) return(sapply(x, stripAA, USE.NAMES = FALSE))
        x2 <- scan(text = x, what = "", quiet = TRUE, sep = ",", strip.white = TRUE)
        x3 <- grep("AA", x2, value = TRUE, invert = TRUE)
        toString(x3)
      }
      
      stripAA(tmp1)
      ## [1] "B1, B22"
      stripAA(tmp2)
      ## [1] "13, C1"
      stripAA(tmp3)
      ## [1] "1, 2, 3"
      
      stripAA(c(tmp1, tmp2, tmp3))   # all at once
      ## [1] "B1, B22" "13, C1"  "1, 2, 3"
      

      【讨论】:

        猜你喜欢
        • 2020-02-15
        • 1970-01-01
        • 1970-01-01
        • 2014-12-27
        • 1970-01-01
        • 2018-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多