regex - 使用 package stringi (regex) 替换部分字符串

标签 regex r string stringi

我有一些字符串

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

最佳答案

不是正则表达式,而是 strsplitrle 以及一些 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/

相关文章:

r - 在 R 中使用管道的 `c()` 函数的替代方案?

r - 使用 %>% 管道和点 (.) 表示法

r - 更改绘图中 y 轴的格式

c - 如何在C中连接宏

python - 在 Python 中将字符串拆分为数组

ruby - Rails 由完整的正则表达式匹配拆分

regex - 在文本文件中用制表符替换单个空格的命令

java - 如何在 Java 中比较字符串?

regex - 在存储过程中转义 Postgres 8.4 中的 LIKE 模式或正则表达式字符串

PHP:如何用破折号和括号之间的所有内容拆分字符串。 (preg_split 或 preg_match)