【问题标题】:regex in Notepad++: remove any number of lines between two given expressionsNotepad ++中的正则表达式:删除两个给定表达式之间的任意行数
【发布时间】:2019-01-09 10:44:12
【问题描述】:

输入文件:

[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”特性进行了一些实验,但到目前为止,我得到的只是表达式将贪婪地匹配整个文件到最后。

帮助?

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

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

//edit#2:清除示例输入/所需输出,以便清楚它们不是字面意思。 Q 已经被回答了 :)

【问题讨论】:

  • 想要的输出是什么?
  • 您能否详细说明您要匹配的条件?当你想删除线条时有点困惑。

标签: regex notepad++


【解决方案1】:

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

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

将括号中的所有关键字替换为用管道|分隔的所有关键字。

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

由于选中了. matches newline 选项,我们希望在贪婪匹配时要小心。

Demo in action

【讨论】:

  • @AhmedAbdelhameed。行号供我们参考。
  • 我已经从示例中删除了行号并对其进行了更改,以使其更加清楚,它们现在并不是字面意思。
  • 您名为“Demo in action”的链接已损坏(HTTP 状态 502)。可以改用 Regex101.com 或 RegexPlanet.com。
【解决方案2】:

这个模式应该涵盖你所有的基础:\n^.*[^][\n]+$

Here's a demo

\n 删除行前的所有换行符

^.* 旨在捕捉“line x:”部分

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

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2017-06-20
    • 2021-10-13
    相关资源
    最近更新 更多