使用regex(管道分隔)删除连续重复项



我有一个用管道分隔的短语列表。我想使用正则表达式替换/替换来删除连续重复项。例如:

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

感谢卡西米尔和希波吕特的巨大进步。

最新更新