Regex 按内容按块筛选器拆分的正则表达式
我想删除每个从X开始、以Y结束并包含值Z的块 正文: 结果:Regex 按内容按块筛选器拆分的正则表达式,regex,Regex,我想删除每个从X开始、以Y结束并包含值Z的块 正文: 结果: BEGIN DESCRIPTION: 1234 BOOL:TRUE END BEGIN DESCRIPTION: 4568 BOOL:TRUE END BEGIN DESCRIPTION: 12489453 BOOL:TRUE END 在这里,我们希望删除每个以“开始”开头、以“结束”结尾、内部带有“BOOL:FALSE”的bloc。 另一种观点是:我想让每个集团都以“开始”开始,以“结束”结束,里面有“BOOL:TRUE” 这一
BEGIN
DESCRIPTION: 1234
BOOL:TRUE
END
BEGIN
DESCRIPTION: 4568
BOOL:TRUE
END
BEGIN
DESCRIPTION: 12489453
BOOL:TRUE
END
在这里,我们希望删除每个以“开始”开头、以“结束”结尾、内部带有“BOOL:FALSE”的bloc。
另一种观点是:我想让每个集团都以“开始”开始,以“结束”结束,里面有“BOOL:TRUE”
这一个取第一个开始,搜索第一个bool:false,然后再搜索结束。那是不对的。
(?s)(开始?布尔:错误?结束)
我想要的是,它就像在屏幕上使用过滤器一样
(?s)(BEGIN.*?BOOL\:FALSE.*?END)
按布尔值筛选:FALSE
(?s)(BEGIN.*?BOOL\:FALSE.*?END)[.FILTERBY_BOOL:FALSE
您可以对此使用负前瞻:
BEGIN((?!TRUE).)*?END
这将检查您拥有的每个点是否前面没有TRUE
,直到END
。因此,不带TRUE
的所有其他块都将被删除
您还可以插入一个[\r\n]?
,使东西更干净一些:
[\r\n]?BEGIN((?!TRUE).)*?END
编辑:
如果只想精确定位FALSE
,可以使用这个正则表达式,它稍微长一点:
[\r\n]?BEGIN(?:(?!FALSE|END).)*?FALSE(?:(?!FALSE|END).)*?END
.对此,您可以使用负前瞻:
BEGIN((?!TRUE).)*?END
这将检查您拥有的每个点是否前面没有TRUE
,直到END
。因此,不带TRUE
的所有其他块都将被删除
您还可以插入一个[\r\n]?
,使东西更干净一些:
[\r\n]?BEGIN((?!TRUE).)*?END
编辑:
如果只想精确定位FALSE
,可以使用这个正则表达式,它稍微长一点:
[\r\n]?BEGIN(?:(?!FALSE|END).)*?FALSE(?:(?!FALSE|END).)*?END
.你在用什么语言?你在用什么语言?我认为这是一个很好的解决方案,+1代表Jerry。@Sniffer感谢你的提醒:)我认为这是一个很好的解决方案,+1代表Jerry。@Sniffer感谢你的提醒:)