データベースから論理式の文字列を取得し、それをさらに評価するためにリストに入れる必要があります。私はすでに文字列解析について多くのことを読んでみましたが、これまでのところ答えは見つかりませんでした。Python:リストのリストに論理文字列を解析する
input_string1 = '((A OR B) AND (C OR D)) OR E'
input_string2 = '(A AND (B OR C) AND D AND E)'
input_string3 = ' A OR (B AND C) OR D OR E'
期待出力に含ま:
Results_string1=[ ['A', 'C'], ['A','D'], ['B','C'], ['B','D'], ['E']]
Results_string2=[ ['A', 'B', 'D', 'E'], ['A', 'C', 'D', 'E'] ]
Results_string3=[ ['A'], ['B','C'], ['D'], ['E'] ]
だから、基本的に、私はOR
の面で完全に因数分解表現を必要とし、リストにそれらを入れて、問題の理解を容易にするため、ここでは3例があります。つまり、AND
の条件は両方とも同じsublist
の式で表され、OR
の条件は新しいサブリストの作成をトリガーします。
e.g. E AND F --> [E, F], E OR F --> [[E],[F]]
データベースの文字列は、任意の長さと任意の量の角括弧を持ちます。
誰かが、文法をどのように定義するかを知っています。 pyparsingパッケージ?これまで
文法の開始は、次のとおりです。
import pyparsing as pp
gene_id = pp.Word(pp.alphanums)
logical = (pp.Keyword("AND") | pp.Keyword("OR")).setName("logical")
l_brackets = (pp.Literal('(')).setName('l_brackets')
r_brackets = (pp.Literal(')')).setName('r_brackets')
しかし、どのように、私は本当のパーサを定義する必要がありますか?
大きな問題の1つは、任意の括弧や文字列の長さの変化を処理する方法がわかりません。私はpyparser
ツールボックスからnestedExpr()-parser
で遊んでいましたが、それまでのところ正しい動作を作成できませんでした。
であるあなたは、これまでに試したものを私たちに示してください。 –
@tobias_kまた、Discrete Mathematicsで使われている記号を使いたいなら、 '+'や '*'を使うことができます。 –
それで、彼はちょうど表現を簡素化することになっています。私は、字句アナライザ(?)の動作で式をループすることを考えています。 –