我想删除每个以X开头的集团,以Y结尾并包含值Z
文本:
BEGIN
DESCRIPTION: 1234
BOOL:TRUE
END
BEGIN
DESCRIPTION: 4568
BOOL:TRUE
END
BEGIN
DESCRIPTION: 715310
BOOL:FALSE
END
BEGIN
DESCRIPTION: 12489453
BOOL:TRUE
END
BEGIN
DESCRIPTION: 41543
BOOL:FALSE
END
结果:
BEGIN
DESCRIPTION: 1234
BOOL:TRUE
END
BEGIN
DESCRIPTION: 4568
BOOL:TRUE
END
BEGIN
DESCRIPTION: 12489453
BOOL:TRUE
END
在这里,我们要删除以“BEGIN”开头的每个块,ENDING BY“END”,WITH“BOOL:FALSE”INSIDE。 另一种观点:我想保持每个集团以“BEGIN”开头,以“END”结束,“BOOL:TRUE”。
这一个采取第一次开始和搜索第一个bool:false搜索结束之前。那是不对的。 (αS)(BEGIN BOOL:??FALSE END)
我希望在
上使用过滤器(?s)(BEGIN.*?BOOL\:FALSE.*?END)
按BOOL过滤:FALSE
(?s)(BEGIN.*?BOOL\:FALSE.*?END)[.FILTERBY_BOOL:FALSE
答案 0 :(得分:1)
您可以使用负向前瞻:
BEGIN((?!TRUE).)*?END
这将检查您拥有的每个点是否提前TRUE
,直到END
。因此,所有其他没有TRUE
的块都将被删除。
您还可以插入[\r\n]?
以使事情变得更清洁:
[\r\n]?BEGIN((?!TRUE).)*?END
编辑:
如果您只想查明FALSE
,可以使用此正则表达式,这有点长:
[\r\n]?BEGIN(?:(?!FALSE|END).)*?FALSE(?:(?!FALSE|END).)*?END