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

问题描述 投票:0回答:1

我已经尝试使用正则表达式过滤圆括号内的内容。

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

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

也不用正则表达式解决。

python regex
1个回答
0
投票

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

用括号将括号括起来,在后面加一个回头,在结尾加一个先行:

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

现在,(?<=\))匹配紧跟在)之后的位置,并且(?=\()匹配紧跟在(之后的位置。

© www.soinside.com 2019 - 2024. All rights reserved.