删除包含相同起始文本的重复行

Remove duplicate lines containing same starting text

所以我有一个庞大的数字列表,其中所有行都包含相同的格式。

#976B4B|B|0|0
#970000|B|0|1
#974B00|B|0|2
#979700|B|0|3
#4B9700|B|0|4
#009700|B|0|5
#00974B|B|0|6
#009797|B|0|7
#004B97|B|0|8
#000097|B|0|9
#4B0097|B|0|10
#970097|B|0|11
#97004B|B|0|12
#970000|B|0|13
#974B00|B|0|14
#979700|B|0|15
#4B9700|B|0|16
#009700|B|0|17
#00974B|B|0|18
#009797|B|0|19
#004B97|B|0|20
#000097|B|0|21
#4B0097|B|0|22
#970097|B|0|23
#97004B|B|0|24
#2C2C2C|B|0|25
#979797|B|0|26
#676767|B|0|27
#97694A|B|0|28
#020202|B|0|29
#6894B4|B|0|30
#976B4B|B|0|31
#808080|B|1|0
#800000|B|1|1
#803F00|B|1|2
#808000|B|1|3

我想做的是删除所有包含相同十六进制代码的重复行,不管它后面的文本如何。

例如,在第一行 #976B4B|B|0|0 中,十六进制 #976B4B 在第 32 行中显示为 #976B4B|B|0|31。我希望删除除第一次出现以外的所有行。

我一直在尝试使用正则表达式来解决这个问题,发现 ^(.*)(\r?\n)+$ 可以删除重复的行,但显然不是我需要的。寻找一些指导,也许可以从中学习。

您可以使用以下正则表达式替换,确保根据需要多次单击全部替换,直到找不到匹配项:

查找内容^((#[[:xdigit:]]+)\|.*(?:\R.+)*?)\R\|.*
替换为</code></p> <p>查看 <a href="https://regex101.com/r/DZwIHW/1" rel="nofollow noreferrer">regex demo</a> 和演示屏幕截图:</p> <p><a href="https://i.stack.imgur.com/VrsE0.png" rel="nofollow noreferrer"><WBIMG:17924856-1.png></a></p> <p><em>详情</em>:</p> <ul> <li><code>^ - 行首

  • ((#[[:xdigit:]]+)\|.*(?:\R.+)*?) - 第 1 组(</code>,它将被保留): <ul> <li><code>(#[[:xdigit:]]+) - 第 2 组:# 和一个或多个十六进制字符
  • \| - 一个 | 字符
  • .* - 该行的其余部分
  • (?:\R.+)*? - 任何零个或多个 non-empty 行(如果它们可以为空,将 .+ 替换为 .*
  • \R\|.* - 一个换行符,第 2 组值,| 和该行的其余部分。