首页 > 解决方案 > 当整行不重复时,使用 REGEX 删除重复项

问题描述

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

用。。。来代替\1

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

但是 – 如果我想检测和删除 dup,我会使用什么 – 当整行 sa 不是一个 dup – 而只是前 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

标签: regex

解决方案


如何使用第二检查例如前 10 个字符:

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

where{n}指定 linestart 中应进行重复检查的字符数量。

  • 整行被捕获$1,也用作替换
  • 第二组用于检查重复行以

在 regex101 看到这个演示


另一个想法是使用前瞻并用空字符串替换:

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

如果捕获$1在下一行前面,则此行将仅删除当前行。

这是 regex101 的演示


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

如果您的正则表达式支持所有格量​​词,则使用 of.*+将提高性能

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


推荐阅读