删除包含相同起始文本的重复行
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 组值,|
和该行的其余部分。
所以我有一个庞大的数字列表,其中所有行都包含相同的格式。
#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 组值,|
和该行的其余部分。