【问题标题】:Remove pattern from string with gsub使用 gsub 从字符串中删除模式
【发布时间】:2026-02-13 01:15:01
【问题描述】:

我正在努力删除字符串中下划线之前的子字符串。 我想使用 *(通配符)作为下划线之前的位:

a <- c("foo_5", "bar_7")

a <- gsub("*_", "", a, perl = TRUE)

结果应该是这样的:

> a
[1] 5 7

我也尝试过诸如“^*”或“?”之类的东西,但并没有真正奏效。

【问题讨论】:

    标签: r gsub


    【解决方案1】:

    只是指出有一种方法使用tidyverse 中的函数,我发现它比gsub 更具可读性:

    a %>% stringr::str_remove(pattern = ".*_")
    

    【讨论】:

      【解决方案2】:
      as.numeric(gsub(pattern=".*_", replacement = '', a)
      [1] 5 7
      

      【讨论】:

      • 除了代码之外,请始终在您的答案中添加解释以便更好地理解
      【解决方案3】:

      或者,您也可以尝试:

      gsub("\\S+_", "", a)
      

      【讨论】:

        【解决方案4】:

        以下代码适用于您的示例:

        gsub(".*_", "", a)
        

        【讨论】:

        • 非常感谢。 '.' 是什么意思?代表?为什么星号“*”(通配符)本身不起作用?我不明白?
        • '.'代表任意字符,因此“.*”代表任意数量的任意字符。更多解释请输入?regex
        • 啊,我明白了!我认为 * 包括“。”的含义。已经!好吧,现在我知道得更好了。再次感谢!
        • 为了澄清,您将正则表达式 (regex) 语法与 glob 语法混淆了;两者都使用 * 星号作为通配符,但两者之间的含义略有不同。
        最近更新 更多