如何删除模式不匹配的所有内容

时间:2013-12-31 16:00:23

标签: regex notepad++

我在Notepad ++中有一个文本文档,其中信息按行分隔,但除了每七行之外都要删除所有内容。此行始终与模式(\d{4} :.*?\r\n)匹配。

如何删除与此模式不匹配的所有内容,以便我将每个第七行分隔为\r\n

2 个答案:

答案 0 :(得分:3)

你可以试试:

^(?!\d{4} :)[\s\S]*?(?=\r\n\d{4} :)

regex101 demo

[注意,我无法将\r放在那里因为我无法以某种方式在输入框中插入回车符...]

^是行锚点的开头,与行的开头匹配。

(?!\d{4} :)是一个负向前瞻,只有在行的开头没有\d{4} :(位置由^表示)时才会使整个正则表达式匹配。

[\s\S]*?是一个匹配任何和所有角色的角色类。量词是一个惰性量词,会导致匹配尽快停止(这取决于以下内容)

(?=\r\n\d{4} :)是一个积极的前瞻,只有在前方有\r\n\d{4} :时才会匹配。

如果我理解你的问题,这将是你正在寻找的。除了第7行之外的所有行都被删除,并且在每个第7行之间只留下一个空行。

答案 1 :(得分:1)

打开搜索对话框,然后选择标记标签。在查找内容字段中输入搜索字符串以查找要保留的行。确保选中书签行正则表达式,然后点击全部标记。接下来访问menu => 搜索 => 书签 => 删除未标记的行

问题是要保留的行与(\d{4} :.*?\r\n)匹配。由于未使用捕获,因此不需要捕获括号()。搜索\r\n通常可以重写为搜索$,即行尾。您的搜索模式只是寻找早期项目之后的第一个行尾。搜索可能会缩短为\d{4} :