次の形式の文字列を変換する必要があります。
'a==1&&(b==2||(c==3||d==4&&e==5)&&f==6)||(g==7&&h==8)'
フィルター処理される sqlalchemy ロジックに ( および を介しor_
てand_
)。最初のステップは、実際に文字列を有用なものに解析することです。私はそれをフォームに入れたいです:
['a==1','&&',['b==2','||',['c==3','||','d==4','&&','e==5'],'&&','f==6'],'||',['g==7','&&','h==8']]
次に、再帰的にステップスルーして解析します。残念ながら、これまで pyparsing を使用したことがないため、この解析ステップで問題が発生しています。
編集(解決策)
interblag上または上で簡単な解決策を見つけることができませんでしたso
が、ドキュメントをかなり掘り下げた後、次の簡単な式をまとめることができました。
from pyparsing import Word, alphanums, nestedExpr
content = Word( alphanums + '=' ) | '||' | '&&'
unnester = nestedExpr( content = content )
a = 'a==3||b==1&&(c==4||(d==1||e==5)&&f==9)'
unnester.parseString( '(' + a + ')' ).asList()
反復中に平坦化ステップが実行される限り、これはかなりうまくいくようです。