使用 gsub 从字符串中删除模式
Posted
技术标签:
【中文标题】使用 gsub 从字符串中删除模式【英文标题】:Remove pattern from string with gsub 【发布时间】:2012-07-31 08:31:12 【问题描述】:我正在努力删除字符串中下划线之前的子字符串。 我想使用 *(通配符)作为下划线之前的位:
a <- c("foo_5", "bar_7")
a <- gsub("*_", "", a, perl = TRUE)
结果应该是这样的:
> a
[1] 5 7
我也尝试过诸如“^*”或“?”之类的东西,但并没有真正奏效。
【问题讨论】:
【参考方案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 语法混淆了;两者都使用 * 星号作为通配符,但两者之间的含义略有不同。以上是关于使用 gsub 从字符串中删除模式的主要内容,如果未能解决你的问题,请参考以下文章