使用 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 从字符串中删除模式的主要内容,如果未能解决你的问题,请参考以下文章

从Lua中的字符串中提取数字

使用gsub在R中的空格之前提取字符串

使用 gsub 删除 R 中第一个空格之前的所有字符串

如何从文本中删除非UTF-8字符

Ruby高级编程正则

从字符列中删除表达式的最干净的方法是什么?