查找具有相同字符集的行

时间:2014-04-11 02:25:29

标签: regex notepad++

我有这样的情况。

Car Driver
Cat Mouse 
Door House 
Driver Car

我需要有关正则表达式的帮助才能找到具有相同字符集或单词的所有行,无论如何排成行。

Car Driver
Driver Car

已编辑列表:

A0JLS3 Q9NUA2 <
A0JLT2 Q9Y3C7
A0N0L5 P26441
A0N0Q1 O00626
A0N0Q1 P35626
A0PJF8 P27361
Q9NUA2 A0JLS3 <

2 个答案:

答案 0 :(得分:0)

我不确定你想要实现的目标。如果您要查找包含单词CarDriver的所有行,则可以标记包含此正则表达式的所有行:

Car Driver|Driver Car

以下是Notepad ++中正则表达式的指南:http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions

考虑查看Stack Overflow Regular Expressions FAQ以获取更多有用的信息。

答案 1 :(得分:0)

编辑:看了一下你的文件后,似乎第一个单词后面有一个制表符,第二个单词后面有一个可变数量的制表符,所以你必须将模式改为:

^(\w+)\h+(\w+)\h*$(?=(?>\R.*)*?\R(?:\1\h+\2|\2\h+\1)\h*$)

其中\h代表水平白色字符。

由于你似乎有巨大的文件而且我没有看到如何在前瞻断言中不使用不情愿的量词,你可以尝试使用这个修改后的模式,其中所有量词都占有欲(如果可能),并且所有组是原子的。它似乎要快一点:

^(\w++)\h++(\w++)\h*+$(?=(?>\R.*+)*?\R(?>\1\h++\2|\2\h++\1)\h*+$)

上一个回答:

您可以使用此模式:

^(\w+) (\w+)$(?=(?>\R.*)*?\R(?:\1 \2|\2 \1)$)

这将在文本后面找到具有两个相同单词的“重复行”的行。如果你想用它去除重复,请记住这将保留最后一次出现并删除第一次。

模式细节:

^(\w+) (\w+)$:这描述了整行(注意行的开始^和结束$的锚点)并将每个单词放入捕获组(组1和组2) )

模式的第二部分检查之后是否存在“类似行”(具有相同单词的行)。由于它嵌入在先行断言中((?=...),即后跟),因此该部分不包含在匹配结果中。

(?>\R.*)*?:直到重复的行。 \R代表CRLF或LF,而。*匹配除换行符之外的所有字符。使用惰性量词重复该组以在第一个重复行之前停止。 (请注意,这也适用于贪婪的量词,最好的选择取决于文档的外观。例如,如果重复文件通常位于文档的末尾,使用贪婪的量词是更好的选择)

(?:\1 \2|\2 \1)描述了使用反向引用第1组和第2组的两种可能性。

添加了

$以确保最后一个单词是完整的。 (否则A0N0L5 P26441 ... A0N0L5 P26441XXX之类的东西会成功)