正则表达式

 re.findall('D?(-?d+.?d*)','1-12*(60+(-40.35/5)-(-4*3))')

import re

def dealwith(express):
    if '+-' in express:express = express.replace('+-','-')
    if '--' in express:express = express.replace('--','+')
    return express

def cal_exp_son(exp_son):
    if '*' in exp_son:
        a,b = exp_son.split('*')
        return str(float(a)*float(b))
    elif '/' in exp_son:
        a, b = exp_son.split('/')
        return str(float(a) / float(b))

def cal_express_no_bracket(exp):
    #计算没有括号的表达式
    exp = exp.strip('()')
    while True:
        ret = re.search('d+.?d*[*/]-?d+.?d*',exp)
        if ret:
            exp_son = ret.group()
            ret = cal_exp_son(exp_son)
            exp = exp.replace(exp_son,ret)
            exp = dealwith(exp)
        else:  #表达式中没有乘除法了
            ret = re.findall('-?d+.?d*',exp)
            sum = 0
            for i in ret:
                sum += float(i)
            return str(sum)

def remove_bracket(new_express):
    while True:
        ret = re.search('([^()]+)',new_express)
        if ret:
            express_no_bracket = ret.group()
            ret = cal_express_no_bracket(express_no_bracket)
            new_express = new_express.replace(express_no_bracket,ret)
            new_express = dealwith(new_express)
        else:
            ret = cal_express_no_bracket(new_express)
            return ret

expression='1-2*((60+2*(-3-40.0/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
new_express = expression.replace(' ','')
res = remove_bracket(new_express)
print(res)
计算器
原文地址:https://www.cnblogs.com/xuqidong/p/13388383.html