Ich möchte Logikstrings analysieren und alle Kombinationen von Elementen, die in einer "und" Logik sind. Zum Beispiel für die Zeichenfolge '(A und (B oder C))' sollte ich [[A, B], [A, C]] und für die Zeichenfolge '(A und B und (C oder D und F) oder F und G) 'Ich sollte [[A, B, C], [A, B, D, F], [F, G]] bekommen.Get Elemente in "AND" in Logik-String mit Python
Ich versuche, Pyparsing zu verwenden. Im Anschluss an diesen Beitrag hier parsing a complex logical expression in pyparsing in a binary tree fashion schaffe ich mit den Buchstaben eine verschachtelte Liste bekommen gruppiert nach Vorlieben („und“ Präferenz hat über „oder“ und Klammer überschreibt diese):
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
Welche gibt:
[[[['A'], 'und', ['B'], 'und', [['C'], 'oder', [['D'], 'und' [ 'F']]]]] 'oder' [[ 'F'] 'und' [ 'G']]]]]
Wie kann ich dieses Ergebnis verarbeiten, um die gewünschte Ausgabe zu erzielen? Ich wäre dankbar für jede Hilfe. Ich habe versucht, pyparsing, aber ich bin offen für andere Module, die besser sein können.
Vielen Dank im Voraus.
Danke für die schnelle Antwort! Es funktioniert perfekt! – Rosa