32
votes

I am struggling to remove the substring before the underscore in my string. I want to use * (wildcard) as the bit before the underscore can vary:

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

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

The result should look like:

> a
[1] 5 7

I also tried stuff like "^*" or "?" but did not really work.

4

4 Answers

56
votes

The following code works on your example :

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

Alternatively, you can also try:

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

Just to point out that there is an approach using functions from the tidyverse, which I find more readable than gsub:

a %>% stringr::str_remove(pattern = ".*_")
-2
votes
as.numeric(gsub(pattern=".*_", replacement = '', a)
[1] 5 7