我需要把表格的字符串
'a==1&&(b==2||(c==3||d==4&&e==5)&&f==6)||(g==7&&h==8)'
进入要过滤的sqlalchemy逻辑(通过or_
和and_
)。第一步实际上是将字符串解析为有用的内容。我想把它做成表格:
然后递归地进行解析。不幸的是,我在这个解析步骤上遇到了麻烦,以前从未使用过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()
只要在迭代过程中执行一个扁平化步骤,这看起来就可以很好地工作。在
我也没有真正使用过
pyparsing
,但下面是一个直接的python实现,它可以满足您的需要:Pyparsing有一个用于解析附加分组操作的内置函数,包括操作符优先级的识别,称为
infixNotation
(以前称为operatorPrecedence
)。请参见此示例代码中如何使用它来解析示例表达式:印刷品:
^{pr2}$相关问题 更多 >
编程相关推荐