【问题标题】:Keep duplicate lines notepad++保留重复行记事本++
【发布时间】:2013-11-01 18:33:16
【问题描述】:

我需要删除唯一的行并将重复的行保留在我的文本文件中(阅读为删除重复行而编写的文章,但我想做相反的事情)。有什么办法可以使用表达式或 textfx 来做到这一点? 例如:

file1.txt
hello
world
hello

运行后,输出应该是

hello
hello

提前致谢

【问题讨论】:

    标签: search text replace notepad++


    【解决方案1】:

    这会找到所有行跟随行重复(但它没有找到最后一行):

    .+\r\n(?=(.+\r\n)\1)
    000000    111111 22
    

    这匹配非空行 0,但前提是它后面跟着(非空行 \1,后面跟着 \1)。

    请注意,这假定 \r\n (Windows) 行分隔符。在 Unix 文本文件上,只需 \n,在 Mac 文本文件上,只需 \r

    在搜索框中,标记Regular expression,取消标记. matches newlineReplace with = ""。

    例子:

    "Zulu
     Alpha
     Alpha
     Bravo
     Charlie
     Charlie
     Delta
     Echo
     Echo
     Foxtrott
    "
    
    (file ends with empty line)
    
    -->
    
    "Alpha
     Alpha
     Charlie
     Charlie
     Echo
     Echo
     Foxtrott
    "
    

    【讨论】:

    • 在您的正则表达式中,如果文件是例如alpha alpha foxtrot foxtrot delta,则输出为:foxtrot foxtrot delta
    • @Rahul,我测试了 phresnel 解决方案并按描述工作!你确定你取消了“.matches newline”复选框吗?
    【解决方案2】:

    在替换对话框中:

    查找:

    ^(.+)\r?\n(?!(.|\r?\n)*\1)
    

    替换:

    *leave empty!*
    

    选项:

    • 选择单选按钮“正则表达式”
    • 不选中复选框“.matches newline”

    优点:

    • 重复行不必紧跟在第一次出现之后

    缺点:

    • 如果一行在您的数据中出现x 次,则在正则表达式之后出现x-1,而不是像OP 中所要求的x

    【讨论】:

    • 好的,通过阅读您在 phresnel 帖子中的其他评论,您的数据似乎也包含非单词字符,例如 <。我已经更新了我的答案。再次检查。
    • 很抱歉所以如果我的文件内容是alpha alpha foxtrot foxtrot delta 并且我运行你的正则表达式,输出是0次出现 P.S:如何在代码块中添加新行?
    • 我明白了。检查更新的答案,看看它现在是否有效。
    • 你好多了。现在输出是alpha foxtrot delta Delta 正在显示,虽然它只出现一次
    猜你喜欢
    • 2015-09-27
    • 2014-03-03
    • 2011-04-26
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 2019-09-05
    • 2023-02-11
    • 1970-01-01
    相关资源
    最近更新 更多