首页 > 解决方案 > 正则表达式删除与第二个字符串匹配的行?

问题描述

我有一长串类似这样的情况的行,第二个单词(空格后的第二个字符串)相同的行,但其余的不同。我只需要保留一行唯一的第二个字符串。仅适用于具有相同第二个单词且始终连续的行。例如,我有几行:

线A 12345
线B 12345
线C 12345
线D
788878 线E
110881 线F 110881 线G 110881 线H 287778 线J
251287 线
K 242424
线
L 242424
线
M 242424

对这个结果

线A 12345
线D 788878
线E 110881
线H 287778
线J 251287
线K 242424

因此,如果行中的第二个单词匹配,则删除除一行之外的所有单词。我尝试创建正则表达式,但只有在第一个单词匹配时才会删除,我不知道如何像示例中那样对空格后的第二个单词执行此操作。

^(\S++).*\K(?:\R\1(?:\h.*|$))+

标签: regexreplaceduplicatesnotepad++

解决方案


你不需要所有的点星。他们会让事情慢下来。您的正确且较短的版本是:

^\S+\K( \S++)([^ ]+\1)+

并将所有匹配替换为$1

在此处查看现场演示


推荐阅读