用其他东西替换字符串中第 N 次出现的字符

标签 r regex

考虑 a = paste(1:10,collapse=", ")这导致

a = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"

我想替换每个第 n 次(比如第 4 次)出现的“,”,并用其他东西替换它(比如“\n”)。所需的输出是:
"1, 2, 3, 4\n 5, 6, 7, 8\n 9, 10"

我正在寻找使用 gsub 的代码(或类似的东西)和某种形式的 regular expression以实现这一目标。

最佳答案

您可以更换 ((?:\d+, ){3}\d),\1\n
您基本上可以分别捕获 group1 和逗号中的第四个逗号之前的所有内容,并将其替换为 \1\n它用 group1 文本和换行符替换匹配的文本,为您提供预期的结果。

Regex Demo

R Code demo

gsub("((?:\\d+, ){3}\\d),", "\\1\n", "1, 2, 3, 4, 5, 6, 7, 8, 9, 10")

打印,
[1] "1, 2, 3, 4\n 5, 6, 7, 8\n 9, 10"

编辑:

要将上述解决方案推广到任何文本,我们可以更改 \d[^,]
New R code demo
gsub("((?:[^,]+, ){3}[^,]+),", "\\1\n", "1, 2, 3, 4, 5, 6, 7, 8, 9, 10")
gsub("((?:[^,]+, ){3}[^,]+),", "\\1\n", "a, bb, ccc, dddd, 500, 600, 700, 800, 900, 1000")

输出,
[1] "1, 2, 3, 4\n 5, 6, 7, 8\n 9, 10"
[1] "a, bb, ccc, dddd\n 500, 600, 700, 800\n 900, 1000"

关于用其他东西替换字符串中第 N 次出现的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55874998/

相关文章:

R 在多个数据框列中查找值

r - 根据其他列中的重复值和日期合并两列中的值

java - Java 中的 replace() 和 replaceAll()

Ruby 围绕一个简单的模式查找和替换

regex - 如何使用 Emacs 删除文件中的空行?

r - ggplotly() 停用轴标题和轴之间的距离并隐藏辅助轴标题

r - 没有中断/下一个循环,跳转到顶层

R 指定时间戳差异的单位

java - 我可以使用正则表达式来匹配java中的预定义字符串吗?

python - re.sub 仅适用于捕获组