Voglio analizzare le stringhe logiche e ottenere tutte le combinazioni di elementi che si trovano in una logica "e". Ad esempio, per la stringa '(A e (B o C))' Dovrei ottenere [[A, B], [A, C]] e per la stringa '(A e B e (C o D e F) o F e G) 'Dovrei ottenere [[A, B, C], [A, B, D, F], [F, G]].ottiene elementi in "AND" nella stringa logica con Python
Sto provando ad usare il pyparsing. A seguito di questo post qui parsing a complex logical expression in pyparsing in a binary tree fashion riesco a ottenere un elenco nidificato con le lettere raggruppati in base alle preferenze ("e" ha la preferenza su "o", e tra parentesi le sostituzioni questo):
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
Che dà:
[[[['A'], 'and', ['B'], 'and', [['C'], 'or', [['D'], 'e' , [ 'F']]]]], 'o', [[ 'F'], 'e', [ 'G']]]]]
Ora come posso elaborare questo risultato per ottenere l'output desiderato? Sarei grato per qualsiasi aiuto. Ho provato il pyparsing ma sono aperto ad altri moduli che potrebbero essere migliori.
Grazie in anticipo.
Grazie per la risposta veloce! Funziona perfettamente! – Rosa