考虑 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/