我需要转一串形式:
'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。
编辑(解决方案)
so
我在 interblag上或上面找不到一个简单的解决方案,但是在对文档进行了大量挖掘之后,我设法将以下简单的表达式放在一起:
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()
只要在迭代期间执行展平步骤,这似乎工作得很好。