【问题标题】:How to delete nonconsecutive lines in text using RegEx?如何使用 RegEx 删除文本中不连续的行?
【发布时间】:2015-06-24 09:58:25
【问题描述】:

我在 Notepad++ 中使用以下表达式删除重复行:

^(.*)(\r?\n\1)+$ 

问题是:

  1. 仅适用于单字线,如果一行中有空格将不起作用。
  2. 仅适用于连续的重复行。

是否有解决方案(最好是正则表达式或宏)来删除包含空格且不连续的文本中的重复行?

【问题讨论】:

  • 请发布您尝试过的内容、您正在处理的文本以及预期的输出。
  • 好的,让我帮忙:你的文件看起来像Line1\r\nLine1\r\nLine1\r\nLine1\r\nLine 2\r\nLine 2,你想把它变成Line1\r\nLine 2\r\nLine 2吗?到目前为止,您尝试过任何正则表达式吗?或者有什么插件?

标签: regex notepad++ duplicate-removal


【解决方案1】:

由于没有人感兴趣,我将发布我认为您需要的内容。

删除文本中包含空格且不连续的重复行

我假设您的文本中有重复行 My Line One and some textMy Line Two and more text

My Line One and some text
My Line One and some text
My Line Two and more text
My Line One and some text
My Line Two and more text

这些重复的行并不都是连续的(只有前两行)。

因此,您可以通过运行此搜索和替换来删除重复的行:

^(.+)\r?\n(?=[\s\S]*?^\1$)

用空字符串替换。

正则表达式注意:^$ 默认被视为行开始/结束锚点,因此我们只匹配一行并使用^(.+)$ 捕获它。然后我们将换行符(任何操作系统样式)与\r?\n 匹配。前瞻 (?=...) 检查是否有任何文本([\s\S]*?)在我们正在检查的行之后具有相同的内容(^\1$ 其中\1 是对捕获的行文本的反向引用)。

【讨论】:

  • 我使用了这个只适用于连续行的:^(.*)(\r?\n\1)+$ 您发布的正则表达式有效!谢谢,祝你有愉快的一天。
  • 您可以使用\R 代替\r?\n 来匹配任何换行符(CRLFCRLFs)。
猜你喜欢
  • 2021-11-30
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多