Regex 记事本中的正则表达式++;:删除两个给定表达式之间任意数量的行

Regex 记事本中的正则表达式++;:删除两个给定表达式之间任意数量的行,regex,notepad++,Regex,Notepad++,输入文件: [keyword1] text0 "text1" = "text2" [text3 keyword1 text4] [text5] [keyword2 text6] "text7" = "text8" "text9" "text10" = "text11" [text12] "text13" = "text14" text15 如果每个“条目”的第一行包含关键字,我想对其进行完整匹配。我所说的“完整输入”是指:第一行,总是在矩形括号中,以及它下面的任何行数,基本上直到我们碰到下

输入文件:

[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++的“.matches newline”功能,但到目前为止,我所做的只是这些表达式将贪婪地将整个文件匹配到底

帮忙

//编辑:因此,基于上述示例的所需输出为(为了清晰起见,保留原始行号):


//编辑#2:清除示例输入/所需输出,以便清楚它们不是字面意义上的。Q已得到回答:)

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

\n
删除行前的任何新行字符

^.*
设计用于捕捉“x行:”部分


[^][\n]+$
匹配一个或多个非新行的字符,或直到行尾的方括号。

您可以使用以下模式(选中
.matches newline
)并替换为零:

\[[^\]]*?(with keyword)[^\]]*?\][^\[]*
将括号中的所有关键字替换为管道分隔的所有关键字
|

基本上是用方括号搜索模式,搜索直到在括号内找到关键字,而不检查下一行

由于选中了
.matches换行符
选项,因此在进行贪婪匹配时需要小心


想要的输出是什么?你能详细说明你想要匹配的条件吗?你想删除行的时候有点困惑。@AhmedAbdelhameed。行号是供我们参考的。我已经从示例中删除了行号,并对其进行了更改,以更清楚地说明它们现在不是字面意义上的。你的链接名为“Demo in action”的已损坏(HTTP状态502)。可以改为移动到Regex101.com或RegexPlanet.com。
\[[^\]]*?(with keyword)[^\]]*?\][^\[]*