Nav*_*ava 0 python regex string
我想将字符串拆分为整数和运算符,以便在python中进行Infix表达式求值.
这是我的字符串:
>>> s = (1-2+3)*5+10/2
Run Code Online (Sandbox Code Playgroud)
我试过这个分裂:
>>>list(s)
['(', '1', '-', '2', '+', '3', ')', '*', '5', '+', '1', '0', '/', '2']
Run Code Online (Sandbox Code Playgroud)
这是错的.因为'10'被分成'1','0'
我试过替代方案:
>>> re.findall('[+-/*//()]+|\d+',s)
['(', '1', '-', '2', '+', '3', ')*', '5', '+', '10', '/', '2']
Run Code Online (Sandbox Code Playgroud)
这也是错的.因为')*'应该分成')','*'
你能帮忙从给定的表达式中拆分运算符和整数吗?
这不是中缀的最佳解决方案.删除[]之后的+,如:
import re
s = "(1-2+3)*5+10/2"
print re.findall('[+-/*//()]|\d+',s)
['(', '1', '-', '2', '+', '3', ')', '*', '5', '+', '10', '/', '2']
Run Code Online (Sandbox Code Playgroud)
请尝试以下链接以获得正确的解决方案:简单平衡括号
from pythonds.basic.stack import Stack
def postfixEval(postfixExpr):
operandStack = Stack()
tokenList = postfixExpr.split()
for token in tokenList:
if token in "0123456789":
operandStack.push(int(token))
else:
operand2 = operandStack.pop()
operand1 = operandStack.pop()
result = doMath(token,operand1,operand2)
operandStack.push(result)
return operandStack.pop()
def doMath(op, op1, op2):
if op == "*":
return op1 * op2
elif op == "/":
return op1 / op2
elif op == "+":
return op1 + op2
else:
return op1 - op2
print(postfixEval('7 8 + 3 2 + /'))
Run Code Online (Sandbox Code Playgroud)
请记住,这是一个后缀实现,仅作为示例.自己做中缀,如果遇到任何困难,请问.