提取所有唯一线

Ago*_* FS 10 regex text-extraction

我有重复精确文本行的文本文件,但我只想要其中一个.想象一下这个文本文件:

AAAAA
AAAAA
AAAAA
BB
BBBBB
BBBBB
CCC
CCC
CCC
Run Code Online (Sandbox Code Playgroud)

我只需要以下四行:

AAAAA
BB
BBBBB
CCC
Run Code Online (Sandbox Code Playgroud)

我使用的是文本编辑器(EmEditor或Notepad ++),它支持RegEx,而不是编程语言,所以我必须使用纯正的表达式.

有帮助吗?

编辑:我检查了hsz提到的另一个帖子,我想说清楚这个是不一样的.虽然两者都需要删除重复的行,但实现它的方式是不同的.我需要纯粹的RegEx,但是其他线程的最佳答案依赖于特定的Notepad ++插件(它甚至不再带有它),所以它甚至不是正则表达式解决方案.第二种情况是正则表达式,它在Notepad ++上有效,但在EmEditor上却没有,我也需要它.所以我不认为我的问题是重复那个问题,虽然这个链接很有用,所以我感谢hsz.

zx8*_*x81 9

两个几乎相同的选项:

匹配所有不重复的行

(?sm)(^[^\r\n]+$)(?!.*^\1$)
Run Code Online (Sandbox Code Playgroud)

线条将匹配,但要提取它们,你真的想要替换其他线条.

替换所有重复的行

这将在Notepad ++中更好地工作:

搜索: (?sm)(^[^\r\n]*)[\r\n](?=.*^\1)

替换:空字符串

  • (?s)激活DOTALL模式,允许点跨线匹配
  • (?m)打开多行模式,允许^$匹配每一行
  • (^[^\r\n]*) 捕获到第1组的行,即
  • ^锚断言,我们是在字符串的开头
  • [^\r\n]* 匹配任何不是换行符的字符
  • [\r\n] 匹配换行符
  • 前瞻(?!.*^\1$)断言我们可以匹配任意数量的字符.*,然后......
  • ^\1$ 与第1组相同的行