我如何用下划线替换除最后一段时间以外的所有时段?
x <- "foo.foo.foo.foo.f"
# "foo_foo_foo_foo.f"
答案 0 :(得分:1)
也许这很有用
library(stringi)
stri_replace_last(str = stri_replace_all(str = x,regex = "\\.",replacement = "\\_"),regex = "\\_",replacement = "\\.")
答案 1 :(得分:1)
@Richard Scriven的评论最适合我:
gsub("\\.(?=[^.]*\\.)", "_", x, perl = TRUE)
答案 2 :(得分:0)
PCRE选项
gsub("(\\.[^.]*)$(*SKIP)(*FAIL)|\\.", "_", x, perl = TRUE)
#[1] "foo_foo_foo_foo.f"
答案 3 :(得分:0)
略有不同的方法,但应该按照您的需要做到:
library(stringr)
x <- "foo.foo.foo.foo.f"
x_split <- str_split(x, "\\.")[[1]]
x_new <- paste(x_split[-length(x_split)], collapse = "_")
x_new <- paste(x_new, x_split[length(x_split)], sep = ".")
x_new
# "foo_foo_foo_foo.f"
它将始终以不同方式处理最后一次拆分,并将推广到期间之间的任何可能文本。
如果你愿意,你可以避免使用stringr
包(它只是使用公共接口包装stringi和base R字符串函数)。