我有一个用管道分隔的短语列表。我想使用正则表达式替换/替换来删除连续重复项。例如:
dog|cat|cat woman|cat woman|dog|dog
cat|cat|catman|catman|catman|cat woman|cat woman|dog|dogman|doggy
将转换为
dog|cat|cat woman|dog
cat|catman|cat woman|dog|dogman|doggy
我被卡住了。到目前为止,我在用CCD_ 2取代CCD_。但很明显,这不起作用,因为输出是
dog|cat woman|cat woman|dog
cat|catman|catman|cat woman|dogman|doggy
感谢您的帮助
在使用捕获组和backreference时,可以在左侧和右侧设置边界,以防止部分匹配。
如果支持后备断言:
(?<![^|n])([^|n]+)(?:|1)+(?![^|n])
模式匹配:
(?<![^|n])
反向查找,断言直接左边的不是除|
或换行符之外的任何字符([^|n]+)
捕获组1,将除|
或换行符之外的任何字符匹配1次或多次,以防止越界(?:|1)+
重复1次或多次匹配|
和对组1的反向引用(?![^|n])
否定前瞻,它断言直接右边的不是除((^||)([^|]+))1+
0或换行符之外的任何字符
Regex演示
在替换中,您可以使用捕获组1。
输出
dog|cat|cat woman|dog
cat|catman|cat woman|dog|dogman|doggy
感谢卡西米尔和希波吕特的巨大进步。