【问题标题】:Delete all lines (not) matching a regex using Notepad++使用 Notepad++ 删除所有与正则表达式匹配的行(不)
【发布时间】:2016-03-31 05:26:02
【问题描述】:

如何在 Notepad++ 中删除所有匹配或不匹配正则表达式的行?

在 Vim 中,我会执行以下操作来删除所有匹配的行:

:g/regex/d

并删除所有不匹配的行:

:!g/regex/d

我在 Notepad++ 中寻找这些命令的等价物。

正如“Notepad++ - delete all lines with certain text”中所解释的那样,我通常会采用空白匹配行然后删除空白行的方法。有没有更简单的方法?


根据this answer,Notepad++ >= 6.0 版本支持在正则表达式中匹配换行符,因此允许直接删除整行而无需先创建空行。当替换为空字符串时,以下模式应删除所有包含“foobar”的行:

^.*foobar.*\r\n

现在,正如“Regular expression to match a line that doesn't contain a word?”中所讨论的,否定正则表达式并不是很简单。在 Notepad++ 中删除不包含“foobar”的行需要以下模式:

^((?!foobar).)*\r\n

因为这是一个非常复杂的命令,仅用于删除不包含单词(或者可能更复杂的表达式)的行,我想知道是否有更简单的解决方案。

【问题讨论】:

  • 您是否只对一步解决方案感兴趣?还有另一种解决方案,即展开循环的解决方案:^[^f\n]*(?:f(?!oobar)[^f\n]*)*(?:\R|$),但它可能看起来又“复杂”。
  • 我对按键/点击次数最少的解决方案感兴趣。 :)
  • 那么,我想,你有一个解决方案。

标签: regex notepad++


【解决方案1】:

Find 对话框的Mark 选项卡上,您可以为匹配的行添加书签... 然后在菜单上Search > Bookmark > Remove Unmarked LinesRemove Bookmarked lines

【讨论】:

  • 这可能是在 Notepad++ 中最快的方法。 :)
  • 是的,这是一个很好的方法!
  • 我已经匹配了每行的某些部分,所以这对我不起作用
  • 这太棒了!
  • 对于那些现在发现它的人,您需要选中“书签行”复选框才能使其工作。 @UmairAyub
猜你喜欢
  • 2018-05-23
  • 2013-06-17
  • 2013-04-23
  • 2019-05-02
  • 2012-01-14
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多