我想解析逻辑字符串并获得"和"逻辑中所有元素的组合.例如,对于字符串'(A和(B或C))'我应该得到[[A,B],[A,C]]和字符串'(A和B以及(C或D和F)或者F和G)'我应该[[A,B,C],[A,B,D,F],[F,G]].
我正在尝试使用pyparsing.在这篇文章之后,在这里以二叉树方式解析pyparsing中的复杂逻辑表达式,我设法得到一个嵌套列表,其中字母按照首选项分组("和"优先于"或",括号覆盖此):
import pyparsing as pp
complex_expr = pp.Forward()
vars = pp.Word(pp.alphas, pp.alphanums + "_") | pp.Regex(r"[+-]?\d+(:?\.\d*)?(:?[eE][+-]?\d+)?").setName('proteins')
clause = pp.Group(vars ^ (pp.Suppress("(") + complex_expr + pp.Suppress(")") ))
expr = pp.operatorPrecedence(clause,[
("and", 2, pp.opAssoc.LEFT, ),
("or", 2, pp.opAssoc.LEFT, ),])
#print expr
complex_expr << expr
parseresult=complex_expr.parseString('( A and B and ( C or D and F ) or F and G )')
print parseresult
Run Code Online (Sandbox Code Playgroud)
这使:
[[[['A'],'和',['B'],'和',[[['C'],'或',[['D'],'和',['F ']]]]],'或',[['F'],'和',['G']]]]]
现在我该如何处理这个结果来实现所需的输出?我会很乐意帮助你.我试过pyparsing但我对其他可能更好的模块开放.
提前致谢.