Вот способ сделать это, используя sub
без групп захвата. Мы можем попробовать заменить весь контент вплоть до последней точки пустой строкой включительно.
a = c("a.b.c.d", "e.b.e", "c", "f.d.e", "a.e.b.g.z")
sub(".*\\.", "", a)
[1] "d" "e" "c" "e" "z"
Если вы хотите вернуть пустую строку, если у ввода нет точки, тогда мы можем использовать ifelse
с grepl
:
input <- "Hello World!"
output <- ifelse(grepl("\\.", input), sub(".*\\.", "", input), "")
Причина подробного кода выше в том, что sub
по умолчанию просто возвращает исходную строку, если совпадение не найдено. Но в вашем случае вы хотите другое поведение.