我在notepad ++中具有以下正则表达式,它将找到以“ BGADD”开头的行以及(如果适用)以“ +”开头的所有后续行。此匹配有效,我可以使用replace(长度为零的字符串)从文档中删除这些文本块。
正则表达式:
^BGADD.*$(\R|\z)(^[+].*$(\R|\z))*
但是我想做的是匹配并删除与此相反的所有文本块,这样我只剩下与模式匹配的内容。
我尝试了正/负环顾四周的组合,但未能提出可行的方法-如果环顾四周必须固定长度,则可能吗? 在此先感谢您的帮助。我尝试了无数次搜索,并尝试实现了我在类似线程上阅读过的各种内容,但还没有达到目的。
我正在使用的数据:
BGADD 1000100010011000
+ 30001002300010035000
+ 91016 91017 9
+ 91024 91025 9
BGSET 10001002100001071000
+ 1011 1012
+ 1019 1020
BGADD 1000100010011000
BGADD 1000100010011000
+ 30001002300010035000
+ 19001006290010013900
BGSET 20001001200001012000
+ 1011 1012
SOMETHINGELSE 3000100230000
BGADD 1000100010011000
+ 30001002300010035000
+ 19001006290010013900
BGSET 30001003300001033000
BGSET 50001001500001035000
BGADD 1000100010011000
+ 30001002300010035000
+ 19001006290010013900
DIFFERENTTHING 19001001190
+ 1011 1012
+ 1019 1020
BGSET 19001002190001071900
BGADD 1000100010011000
如果我用正则表达式上的空白字符串替换,会是什么样子:
BGSET 10001002100001071000
+ 1011 1012
+ 1019 1020
BGSET 20001001200001012000
+ 1011 1012
SOMETHINGELSE 3000100230000
BGSET 30001003300001033000
BGSET 50001001500001035000
DIFFERENTTHING 19001001190
+ 1011 1012
+ 1019 1020
BGSET 19001002190001071900
我的目标是(相反):
BGADD 1000100010011000
+ 30001002300010035000
+ 91016 91017 9
+ 91024 91025 9
BGADD 1000100010011000
BGADD 1000100010011000
+ 30001002300010035000
+ 19001006290010013900
BGADD 1000100010011000
+ 30001002300010035000
+ 19001006290010013900
BGADD 1000100010011000
+ 30001002300010035000
+ 19001006290010013900
BGADD 1000100010011000
答案 0 :(得分:2)
结果证明,我想我已经回答了我自己的问题-感谢@ Mako212的建议,该建议提供了我还未想到的第一部分。 我构建的正则表达式会找到不以“ BGADD”或“ +”开头的行,然后使用与问题中第一个正则表达式相同的基础进行匹配,直到找到下一个“ BGADD”实例为止。
我想的是答案:
^(?!BGADD|[+]).*$(\R|\z)(.*$(\R|\z))*?(?=BGADD)
>>>经过编辑以简化和捕获文档的最后一行:
^(?!BGADD|[+])(.*$(\R|\z))+?(?=BGADD|\z)
输出:
BGADD 1000100010011000
+ 30001002300010035000
+ 91016 91017 9
+ 91024 91025 9
BGADD 1000100010011000
BGADD 1000100010011000
+ 30001002300010035000
+ 19001006290010013900
BGADD 1000100010011000
+ 30001002300010035000
+ 19001006290010013900
BGADD 1000100010011000
+ 30001002300010035000
+ 19001006290010013900
BGADD 1000100010011000