我已经尝试使用正则表达式过滤圆括号内的内容。
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)"
我希望得到的是这些内容和与的清单
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)
^^^^^^^ ^^^^^^
现在,(?<=\))
匹配紧跟在)
之后的位置,并且(?=\()
匹配紧跟在(
之后的位置。