regex - 匹配多行正则表达式模式的逆
问题描述
我在记事本++中有以下正则表达式,它将找到以“BGADD”开头的行,如果适用,所有后续行都以“+”开头。此匹配有效,我可以使用替换(使用零长度字符串)从我的文档中删除这些文本块。
正则表达式:
^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
解决方案
结果我想我已经回答了我自己的问题——感谢@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
推荐阅读
- java - Eclipse RCP:从编辑器获取当前文本,即使它没有保存
- java - 如何创建一个 XP 系统不和谐机器人 (java)
- ruby-on-rails - Rails 处理对资源的 ActiveStorage 附件所做的编辑的方式是什么?
- aws-lambda - 使用 AWS Lambda 的 Discord 机器人
- html - Bootstrap 4 与可折叠和显示实用程序的兼容性
- c# - 使用 HttpClient 如何发送 GET 请求并在更改端点的循环中返回响应
- sql - SQL查询Employee在多个部门工作的位置
- json - 我在数据库中检查数据的逻辑是否有效?
- python - 将 tf.control_dependencies 与 session.run 一起使用
- javascript - 在启用 CORS 的情况下重定向后获取图像位置?