如何在Python中评估嵌套布尔/逻辑表达式?规则解析优化
复杂规则解析器开发问题
规则特性
- 空格分隔独立规则
+表示AND运算符(需全部满足),表示OR运算符(满足任一即可)-标记可选元素(该元素不存在不影响规则判定)- 括号内的token需作为整体求值
给定嵌套规则定义
definition = '((K00925 K00625),K01895) (K00193+K00197+K00194) (K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584) (K00399+K00401+K00402) (K22480+K22481+K22482,K03388+K03389+K03390,K08264+K08265,K03388+K03389+K03390+K14127+(K14126+K14128,K22516+K00125))'
各规则含义
((K00925 K00625),K01895):等价于(K00925 AND K00625) OR K01895(K00193+K00197+K00194):三个token必须全部存在(K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584):除带-的可选元素外,其余token必须全部存在(K00399+K00401+K00402):三个token必须全部存在(K22480+K22481+K22482,K03388+K03389+K03390,K08264+K08265,K03388+K03389+K03390+K14127+(K14126+K14128,K22516+K00125)):满足任一子规则即可,最后一子规则包含嵌套OR逻辑
当前问题
现有代码可处理简单规则,但无法正确评估带嵌套括号的复杂规则,例如处理第一个规则时存在拆分错误。
预期输出
{ '((K00925 K00625),K01895)':True, '(K00193+K00197+K00194)':True, '(K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584)':True, '(K00399+K00401+K00402)':True, '(K22480+K22481+K22482,K03388+K03389+K03390,K08264+K08265,K03388+K03389+K03390+K14127+(K14126+K14128,K22516+K00125))':True }
边缘案例要求
规则:
rule_edge_case='((K00134,K00150) K00927,K11389)'
当给定tokens集合为{'K00134','K00927'}时,求值结果应为True,因为满足(K00134 OR K00150) AND K00927逻辑。
内容的提问来源于stack exchange,提问作者O.rka
相关产品推荐
相关产品推荐

