擅长:python、mysql、java
<p>将括号之间的表达式视为符号列表,该列表也可以包含另一个列表。所以<code>"((1 * 3) / (4 / 2))"</code>由<code>[['1', '*', '3'], '/', ['4', '/' '2']]</code>表示。将符号列表称为“节点”。在</p>
<p>迭代字符串时,维护一个堆栈,它跟踪您所在的“括号对”(或节点)。将符号追加到堆栈中的最后一个节点(<code>current_node</code>)。在每个<code>'('</code>处,向您所在的节点添加一个新节点,<em>和</em>添加到堆栈中。在每个<code>')'</code>处,弹出堆栈,这样您就在父节点中,并且将在那里附加更多的符号。在</p>
<p>然后可以递归地计算每个节点,先在内部计算,直到得到最终值。在</p>
<p>对该代码进行反向工程。在</p>
<pre><code>def parse(expr):
stack = [[]]
for i in expr:
current_node = stack[-1]
if i == '(':
new_node = []
current_node.append(new_node)
stack.append(new_node)
elif i == ')':
stack.pop()
elif not i.isspace():
current_node.append(i)
return stack[0]
print(parse('(1 * 3) / (4 / 2)')) # [['1', '*', '3'], '/', ['4', '/', '2']]
</code></pre>
<hr/>
<p>看看这个问题:
<a href="https://stackoverflow.com/questions/1651487/python-parsing-bracketed-blocks">Python parsing bracketed blocks</a></p>