Notepad ++中的正则表达式:删除两个给定表达式之间的任意数量的行

时间:2018-08-01 18:53:01

标签: regex notepad++

输入文件:

[keyword1]
text0
"text1" = "text2"

[text3 keyword1 text4]
[text5]
[keyword2 text6]
"text7" = "text8"
"text9"
"text10" = "text11"

[text12]
"text13" = "text14"
text15

如果每个“条目”的第一行都包含一个关键字,我希望将其完全匹配。我所说的“全部输入”是:第一行总是放在方括号中,而在它下面的行数很多,基本上直到我们敲到下一个[字符为止。

如果我事先知道每个“入口”会有多少行,例如,我知道该怎么做。对于下面的一行,我会做这样的事情:

^\[(.+)(keyword1|keyword2)(.+)\]\r\n(.+)\r\n

但是我不知道如何使用任意数量的行。我已经对NP ++的“。match newline”功能进行了一些实验,但是到目前为止,让我感到困惑的是表达式将贪婪地匹配整个文件。

帮助?

// edit:因此,根据上述示例,所需的输出将是(为清晰起见,保留原始行号):

[text5]
[text12]
"text13" = "text14"
text15

// edit#2:清除了示例输入/所需的输出,因此很明显它们不是字面上的意思。 Q已经被回答了:)

2 个答案:

答案 0 :(得分:0)

此模式应涵盖您的所有基础:\n^.*[^][\n]+$

Here's a demo

\n删除该行之前的所有新行字符

^.*旨在捕获“ x行:”部分

[^][\n]+$匹配一个或多个不是换行符的字符,或者直到行尾为止都用方括号括住的字符。

答案 1 :(得分:0)

您可以使用以下模式(选中. matches newline),然后不进行任何替换:

\[[^\]]*?(with keyword)[^\]]*?\][^\[]*

用括号|分隔所有关键字,将其替换为括号。

基本搜索带有方括号的模式,并搜索直到在 括号内找到关键字,而不检查下一行。

由于选中了. matches newline选项,因此在贪婪匹配时要特别小心。

Demo in action

enter image description here