我有一些字符串
string <- "abbccc"
我想将同一个字母的链替换为一个字母和该字母的出现次数。所以我想要这样的东西:
“ab2c3”
我使用 stringi
包来做这个,但它并没有完全按照我想要的方式工作。假设我已经有了带有要替换零件的矢量:
vector <- c("b2", "c3")
stri_replace_all_regex(string, "([a-z])\\1{1,8}", vector)
输出:
[1] "ab2b2" "ac3c3"
我想要的输出:[1] "ab2c3"
我也试过这种方式
stri_replace_all_regex(string, "([a-z])\\1{1,8}", vector, vectorize_all=FALSE)
但是我得到了错误
Error in stri_replace_all_regex(string, "([a-z])\\1{1,8}", vector, vectorize_all = FALSE) :
vector length not consistent with other arguments
最佳答案
不是正则表达式,而是 strsplit
和 rle
以及一些 paste
魔法:
string <- c("abbccc", "bbaccc", "uffff", "aaabccccddd")
sapply(lapply(strsplit(string, ""), rle), function(x) {
paste(x[[2]], ifelse(x[[1]] == 1, "", x[[1]]), sep="", collapse="")
})
## [1] "ab2c3" "b2ac3" "uf4" "a3bc4d3"
关于regex - 使用 package stringi (regex) 替换部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27204807/