使用正则表达式

时间:2015-07-16 08:02:32

标签: regex

我想使用 Notepad ++ 来删除重复行开头的行。例如,我有一个分号分隔文件,如下所示:

string at the beginning of line 1;second string line 1; final string line1;
string at the beginning of line 2;second string line 2; final string line2;
string at the beginning of line 1;second string line 3; final string line3;
string at the beginning of line 1;second string line 4; final string line4;

我想删除第三行和第四行,因为它们与第一行具有相同的第一个子串并获得以下结果:

string at the beginning of line 1;second string line 1; final string line1;
string at the beginning of line 2;second string line 2; final string line2;

1 个答案:

答案 0 :(得分:1)

您可以尝试使用以下正则表达式:

^(([^;]*;).*\R(?:.*\R)*?)\2.*

或者

^(([^;]*;).*\R(?:.*\R)*?)\2.*(?:$|\R)

并替换为$1

我们的想法是在包含非分号字符(最多;[^;]*;)的行的开头找到并捕获文本,然后匹配行的其余部分(使用{{ 1}}),然后是0行或更多行(.*\R),直到以第2组中捕获的文本开头的行,将其与结束匹配并捕获到我们稍后可以使用的第二个组。

缺点是您必须多次单击“全部替换”,直到找不到匹配项。

感谢@nhahtdh,他注意到我以前的(?:.*\R)*?正则表达式中存在一个可以过度使用的错误。

enter image description here