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)