【发布时间】: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|$),但它可能看起来又“复杂”。 -
我对按键/点击次数最少的解决方案感兴趣。 :)
-
那么,我想,你有一个解决方案。