python之将带括号的内容过滤到 Python 列表中

shanyou 阅读:22 2024-11-24 20:56:43 评论:0

我试图用正则表达式过滤圆括号内的内容。

s = "(time.timestamp > '2019-12-04 10:16:57+0100' AND car.Audi > 5) AND (time.timestamp > '2019-12-04 10:16:57+0100' AND car.VW > 5) OR (time.timestamp > '2019-12-04 10:16:57+0100' AND car.BMW > 5)"  

我想要作为返回的是这些内容和 AND 的列表

list = [ 
         "(time.timestamp > '2019-12-04 10:16:57+0100' AND car.Audi > 5)", 
         "AND", 
         "(time.timestamp > '2019-12-04 10:16:57+0100' AND car.VW > 5)", 
         "OR", 
         "(time.timestamp > '2019-12-04 10:16:57+0100' AND car.BMW > 5)" 
        ] 

我尝试了 re.split(r'\)\s*(AND|OR)\s*\(', s) 但一些括号被删除了。

[ 
"(events.timestamp > '2019-12-04 10:16:57+0100' AND event_type.engine_error > 5", 
 'AND',  
"events.timestamp > '2019-12-04 10:16:57+0100' AND event_type.turtle_lamp > 5)", 
 ... 
] 

你知道我怎样才能最好地解决它吗?

也不一定要用正则表达式来解决。

请您参考如下方法:

括号被删除,因为它们是消耗 模式的一部分。使用 re.split 删除所有未捕获的消耗字符.

用环视将括号括起来,在开始时向后看,在结束时向前看:

re.split(r'(?<=\))\s*(AND|OR)\s*(?=\()', s) 
           ^^^^^^^              ^^^^^^ 

现在,(?<=\))匹配紧接在 ) 之前的位置(?=\()匹配紧跟 ( 的位置.


标签:Python
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号