用括号将内容过滤到Python列表中

时间:2019-12-12 09:18:26

标签: python regex

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

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)",
 ...
]

您知道我如何才能最好地解决它吗?

它也不是必须用正则表达式解决的。

1 个答案:

答案 0 :(得分:2)

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

在圆括号中加上环视符号,在开头有一个后向,在结尾有一个前瞻:

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

现在,(?<=\))匹配紧随)之后的位置,而(?=\()匹配紧随(之后的位置。