我的目标是识别并保留DUPLICATE,TRIPLICATE等行,即在Notepad ++中多次出现的所有行?换句话说,我怎么才能删除所有唯一的行?
例如,这里有七(7)个单独的列表和每个列表所需的真实重复行(显示为7列,将每列视为单独的列表或文件!)。 (这里的列表并排显示仅用于节省空间,在现实生活中,7个列表中的每个列表单独发生,独立于其他列表并且是单独的文件!)
list1 list2 list3 list4 list5 list6 list7
1 0 0 0 0 0 0
2 1 1 1 1 1 1
3 2 2 2 2 2 2
4 3 3 3 3 3 3
4 4 4 4 4 4 4
4 4 4 4 4 4 4
5 4 4 4 4 4 4
6 5 5 5 5 5 5
7 5 5 5 5 5 5
8 6 6 6 6 6 6
9 6 6 6 6 6 6
abc 7 7 7 7 7 7
abd 8 8 8 8 8 8
abd 9 9 9 9 9 9
abe <CR> 9 9 9 9
<CR> 99 99
<CR>
[Lines of multiple occurence of above lists:]
4 4 4 4 4 4 4
4 4 4 4 4 4 4
4 4 4 4 4 4 4
abd 5 5 5 5 5 5
abd 5 5 5 5 5 5
6 6 6 6 6 6
6 6 6 6 6 6
9 9 9 9
9 9 9 9
消除重复项有很多解决方案(例如,TextFX; notepad++ delete duplicate and original lines to keep unique lines),我找不到保持重复项的解决方案。
((.*)\R(\2\R)+)*\K.+\R
@Lars Fischer:这个脚本几乎可以正常工作,除了(预先排序)列表的最后一个条目需要是唯一行后跟一个<CR>
空行。一个(次优)解决方法是插入一个人工(辅助)唯一线(例如,zzz),然后插入一个空行<CR>
作为最后两行。
(问题结束)
更新3:每个stackoverflow“ask a new question”指令重新发布此问题。 (@AdrianHHH,@B. Desai,@Paolo Forgia,@greg-449,@Erik von Asmuth得出错误的结论,即此问题与notepad++ delete duplicate and original lines to keep unique lines重复。这个问题是绝对不是@AdrianHHH等引用的重复。
更新2:@AdrianHHH这个问题并不比其他Notepad ++问题“广泛”(事实上,更难以更具体)或更少研究,包括引用的https://stackoverflow.com/questions/29303148(错误地)由@AdrianHHH等人。同样的问题。
更新: @AdrianHHH,@B. Desai,@Paolo Forgia,@greg-449,@Erik von Asmuth 此问题与以下内容不同: https://stackoverflow.com/questions/29303148 beacuse Q 29303148 (i)既没有询问如何识别和保留多次出现的行,(ii)也没有提供解决方案答案。 Q 29303148问“......我只需要独特的线条。”
答案 0 :(得分:3)
以下是基于常规表达式和书签的解决方案,它适用于已排序文件(即每个重复行后面都有其重复项):
((.*)\R(\2\R?)+)*\K.*
. matches newline
<强>解释强>
正则表达式由三部分组成:
((.*)\R(\2\R?)+)*
:这是一个由一个或多个行块组成的可选重复块
( ... )*
匹配零个或多个这样的重复行块(如果在您的示例中,三个4将跟随两个5,我们将需要重复块序列的概念 )(.*)\R(\2\R?)+
:\2
引用(.*)
的内容:这是一行的重复\R
是可选的(由于?
)换行符。因此,如果该行不以换行符结尾如果在您开始的光标位置后有一个重复的行块,则会匹配它。
现在\K
会丢弃我们到目前为止匹配的内容(重复项)并将“光标”放在第一个唯一行之前
.*
匹配下一个(唯一)行和书签使用全部标记,我们会为所有此类唯一行添加书签,以便我们可以使用搜索中的条目删除它们&gt;书签菜单。