当整个行不是重复项时,使用REGEX删除重复项

^(.*)(\r?\n\1)+$

替换为\1

以上是使用REGEX删除重复行的好方法 但它要求整行都是重复的

但是–如果我想检测并消除重复-当整行不是一个重复-而是前X个字符时,我将使用什么

示例: 原始文件

12345 Dennis Yancey     University of Miami
12345 Dennis Yancey     University of Milan
12345 Dennis Yancey     University of Rome
12344 Ryan Gardner      University of Spain
12347 Smith John        University of Canada

已删除重复项

12345 Dennis Yancey     University of Miami
12344 Ryan Gardner      University of Spain
12347 Smith John        University of Canada
liqzone 回答:当整个行不是重复项时,使用REGEX删除重复项

如何使用group 进行检查,例如前10个字符:

^((.{10}).*)(?:\r?\n\2.*)+

{n}处指定应重复检查的行首字符数。

  • 整行都捕获到$1中,该行也用作替换
  • 第二组用于检查重复的行是否以
  • 开头

See this demo at regex101


另一个想法是使用 lookahead 并替换为空字符串

^(.{10}).*\r?\n(?=\1)

如果捕获的$1在下一行的前面,则该行将只删除当前行。

Here is the demo at regex101


还要删除最多包含10个字符的重复行,这是使用条件^(?:(.{10})|(.{0,9}$)).*+\r?\n(?(1)(?=\1)|(?=\2$))的PCRE想法,并替换为空字符串。

如果您的正则表达式支持possessive quantifiers,请使用.*+ will improve performance

请注意,所有这些模式(和您当前的正则表达式)仅针对连续重复行。

本文链接:https://www.f2er.com/3164555.html

大家都在问