python允许字符串嵌套_从python中的字符串解析嵌套逻辑

我也没有真正使用过pyparsing,但下面是一个直接的python实现,它可以满足您的需要:import re

from collections import namedtuple

TOKENIZER = re.compile(r"\w+==\w+|&&|\|\||[()]").findall

Node = namedtuple("Node", ["parent", "children"])

def syntax_tree(text, tokenizer, brackets):

root = cur_node = Node(None, [])

stack = []

for token in tokenizer(text):

if token == brackets["("]:

stack.append(token)

new_node = Node(cur_node, [])

cur_node.children.append(new_node)

cur_node = new_node

elif token == brackets[")"]:

if stack and stack.pop() == brackets[")"]:

cur_node = cur_node.parent

else:

raise Exception("Parse error: unmatched parentheses")

else:

cur_node.children.append(token)

if stack:

raise Exception("Parse error: unmatched parentheses")

return root

def listify(root):

if isinstance(root, Node):

return [listify(item) for item in root.children]

else:

return root

if __name__ == "__main__":

expr = "a==1&&(b==2||(c==3||d==4&&e==5)&&f==6)||(g==7&&h==8)"

tree = syntax_tree(expr, TOKENIZER, {"(": "(", ")": ")"})

obj = listify(tree)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值