正则表达式:选择所有重复行

时间:2019-06-07 17:10:42

标签: regex regex-lookarounds regex-group

好吧,我已经玩了一段时间了,已经接近了,但仍然无法实现。

我想去:

a
a
b
a
c
a

到(在Notepad ++中):

b
c

我可以做到:

a
b
c

这是迄今为止我最大的失败,但是您明白了:

^(((.+)(\r?\n))(?:(?!\1).*\s*)?)((?:(?!\2).*\s*)?(\2))+
^((.+)(\r?\n))((?:(?!\1).*\s*)?(\1))+

从Regexr,我只需要“测试行”。 Regexr

最接近的尝试:

^((.+)(\r?\n))(?=(.+)(\r?\n))?(\1)+

enter image description here

2 个答案:

答案 0 :(得分:2)

对于那些没有阅读注释的人,想法是使用NP ++通过将其放入完整的IP列表中并完全删除在任何地方出现的重复行来过滤IP黑名单。

这可以通过use of a variable length lookbehind完成,这在记事本++中是不受支持的。

作为一种解决方法,并且也更有效:

  1. Sort lines by use of Plugin TextFX Character(全选)。
  2. 使用类似^(.+)\R(?:\1(?:\R|$))+的简单模式删除连续的重复行。
  • ^ line start
  • (.+)\R capture one or more个字符到\1,后跟\R换行符。
  • (?:\1(?:\R|$))+后跟一个或多个(\1,后跟(换行符或$结束))。

答案 1 :(得分:0)

正则表达式恕我直言,不要执行此任务。这种任务需要处理成任何编程语言。我发布了一种庞大的解决方案,但基于shell:

sort file.txt | uniq -d

此命令将对文件进行排序并显示重复值的列表。