我正在寻找一个regex
与每个字符的第三,第四,...匹配的模式。请看下面的说明:
例如,我有以下字符串:
111aabbccxccybbzaa1
我想在第二次出现后替换所有重复的字符。输出将是:
11-aabbccx--y--z---
到目前为止,我尝试过一些正则表达式模式:
使用以下正则表达式,我可以找到每个字符的最后一次出现: (.)(?=.*\1)
或使用此方法,我可以将其用于连续重复,但不能重复: ([a-zA-Z1-9])\1{2,}
1
您打算将哪种正则表达式引擎与正则表达式一起使用?
—
WiktorStribiżew19年
您只能使用支持无限宽后向的正则表达式来执行此操作,因此,您唯一的选择是Python PyPi正则表达式模块。与
—
维克多·斯特里比维(WiktorStribiżew)
(.)(?<=^(?:(?:(?!\1).)*\1){2,}(?:(?!\1).)*\1)
正则表达式一起使用。演示。
@WiktorStribiżew比那更好
—
Stefan Pochmann
(.)(?<=(.*\1){3})
吗?
@StefanPochmann很好,
—
WiktorStribiżew19年
(.)(?<=(?:.*\1){3})
也可以做,但是所有这些都不是很好,因为过多的回溯可能会导致字符串较长的问题。我宁愿写一个非正则表达式的方法来解决这个问题。
@WiktorStribiżew如果我多次将测试字符串复制到regexstorm中,使其成为一个巨大的字符串,我会得到性能差异,例如您的模式750ms,
—
泡泡泡泡
(.)(?<=(?:.*\1){3})
25ms,(.)(?<=(?:\1.*?){2}\1)
3ms。您可以测试自己。您的模式似乎是效率最低的模式,最难阅读。