notepad++ 正则表达式:删除关键字之间的多行

Posted

技术标签:

【中文标题】notepad++ 正则表达式:删除关键字之间的多行【英文标题】:notepad++ regex: Removing multiple lines between keywords 【发布时间】:2014-11-20 07:37:36 【问题描述】:

现状:

ODR+1'&
DPT+::LAS'&
ARR+::RSW'&
DAT+:021214'&
TVL+20141202:0835:20141202:1830:0+LAS+RSW+WN+596+ET'&
APD+73W+:1+:'&
APD+::415'&
CAR+O:WN'&
DAT+AA:021214:1400::::MKE*AD:021214:1430:::73W'&
ODR+2'&
DPT+::RSW'&
ARR+::LAS'&
DAT+:111214'&
TVL+20141211:1030:20141211:1500:0+RSW+LAS+WN+274+ET'&
APD+73W+:+:1'&
APD+::450'&
CAR+O:WN'&
DAT+AA:111214:1225::::MDW*AD:111214:1300:::73W'&
UNT+29+1'

我想删除第二个 DATUNT 之间的所有内容,即我希望这是最终结果:

ODR+1'&
DPT+::LAS'&
ARR+::RSW'&
DAT+:021214'&
TVL+20141202:0835:20141202:1830:0+LAS+RSW+WN+596+ET'&
APD+73W+:1+:'&
APD+::415'&
CAR+O:WN'&
DAT+AA:021214:1400::::MKE*AD:021214:1430:::73W'&
ODR+2'&
DPT+::RSW'&
ARR+::LAS'&
DAT+:111214'&
UNT+29+1'

由于存在多个无法区分的 TVL 片段,我想保留第一个片段并删除第二个片段......我遇到了更多困难

【问题讨论】:

【参考方案1】:
^(.*?DAT.*?)DAT.*?(UNT)

试试这个。由$1$2替换。查看演示。

http://regex101.com/r/lZ5mN8/56

【讨论】:

【参考方案2】:

你需要使用DOTALL模式(?s)来使点匹配偶线刹车,

(?s)^(.*?DAT.*?DAT[^\n]*\n).*?\n(?=UNT)

然后将匹配替换为$1

DEMO

似乎您正试图删除第三个 DAT 之后的行。如果是,那么您可以尝试以下方法,

(?s)^(.*?DAT.*?DAT.*?DAT[^\n]*\n).*?\n(?=UNT)

DEMO

【讨论】:

@hwnd 你为什么删除你的答案? 对不起...我输入和输出错误...您的答案适用于初始查询 您是要删除第二个 DAT 还是第三个 DAT 中的所有行?

以上是关于notepad++ 正则表达式:删除关键字之间的多行的主要内容,如果未能解决你的问题,请参考以下文章

notepad++正则表达式删除大括号之间的所有文本

notepad++删除某关键字所在的行内容

Notepad ++中的正则表达式删除空行

在 NotePad++ 中使用正则表达式查找多个关键字?

notepad++正则表达式删除某行某字符开始的后面所有字符

notepad++正则表达式批量删除