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)
^^^^^^^ ^^^^^^
现在,(?<=\))
匹配紧接在 )
之前的位置和 (?=\()
匹配紧跟 (
的位置.
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。