我试图用正则表达式过滤圆括号内的内容。
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)",
...
]
您知道我如何才能最好地解决它吗?
它也不是必须用正则表达式解决的。
答案 0 :(得分:2)
括号被删除了,因为它们是 consumption 模式的一部分。使用re.split
删除所有未捕获的已消耗字符。
在圆括号中加上环视符号,在开头有一个后向,在结尾有一个前瞻:
re.split(r'(?<=\))\s*(AND|OR)\s*(?=\()', s)
^^^^^^^ ^^^^^^
现在,(?<=\))
匹配紧随)
之后的位置,而(?=\()
匹配紧随(
之后的位置。>