R 使用gsub从字符串中删除模式

R 使用gsub从字符串中删除模式,r,gsub,R,Gsub,我正在努力删除字符串中下划线之前的子字符串。 我想使用*(通配符)作为下划线可以变化的前一位: a <- c("foo_5", "bar_7") a <- gsub("*_", "", a, perl = TRUE) 我还尝试了诸如“^*”或“?”之类的东西,但没有真正起作用。以下代码适用于您的示例: gsub(".*_", "", a) 或者,您也可以尝试: gsub("\\S+_", "", a) 我要指出的是,有一种方法使用了tidyverse中的函数,我发现它比gsu

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

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

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

我还尝试了诸如“^*”或“?”之类的东西,但没有真正起作用。

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

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

或者,您也可以尝试:

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

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

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

非常感谢。“.”代表什么?为什么星号“*”(通配符)不能自己工作?我不明白?“.”代表任何字符,所以“*”代表任何字符的任何数字。您可以通过键入
?regex
找到更多解释。啊,我明白了!我想*已经包含了“.”的意思了!好吧,现在我更清楚了。再次感谢!为了澄清,您混淆了正则表达式(regex)语法和glob语法;两者都使用*星字符作为通配符,但两者的含义略有不同。为了更好地理解代码,请始终在答案中添加解释
as.numeric(gsub(pattern=".*_", replacement = '', a)
[1] 5 7
a %>% stringr::str_remove(pattern = ".*_")