我怎么能用下划线替换除最后一段时间以外的所有时间段?

时间:2016-07-23 04:16:47

标签: r

我如何用下划线替换除最后一段时间以外的所有时段?

x <- "foo.foo.foo.foo.f"
# "foo_foo_foo_foo.f" 

4 个答案:

答案 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字符串函数)。