import re
num = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
def a_and_s(new_num):
new_num = new_num.replace('--','+')
new_num = new_num.replace('+-','-')
return new_num
def m_and_d(ret_num):
if '*' in ret_num:
a,b = ret_num.split('*')
ret_num = float(a) * float(b)
return str(ret_num)
if '/' in ret_num:
a,b = ret_num.split('/')
ret_num = float(a) / float(b)
return str(ret_num)
def screen_num(ret_num):
ret_num = ret_num.strip('()')
while True:
ret = re.search('\d+\.?\d*[*/]-?\d+\.?\d*', ret_num)
if ret: # 1-2*-1388335.8476190479
nice = ret.group()
new_num = m_and_d(nice)
print('new_num1:%s'%(new_num))
ret_num = ret_num.replace(nice, new_num)
ret_num = a_and_s(ret_num)
else:
size_num = re.findall('-?\d+\.?\d*', ret_num)
print('size_num:%s'%(size_num))
sums = 0
for i in size_num:
sums += float(i)
return str(sums)
def screen(num):
new_num = num.replace(' ','') # 1. 去空格
while True:
ret = re.search('\([^()]+\)', new_num)
if ret:
ret_num = ret.group()
careful = screen_num(ret_num)
new_num = new_num.replace(ret_num, careful)
print('new_num:%s'%(new_num))
else:
last_num = screen_num(new_num)
return last_num
result = screen(num)
print(result) # 2776672.6952380957
import re
num = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
def a_and_s(new_num):
new_num = new_num.replace('--','+')
new_num = new_num.replace('+-','-')
return new_num
def m_and_d(ret_num):
if '*' in ret_num:
a,b = ret_num.split('*')
ret_num = float(a) * float(b)
return str(ret_num)
if '/' in ret_num:
a,b = ret_num.split('/')
ret_num = float(a) / float(b)
return str(ret_num)
def screen_num(ret_num):
ret_num = ret_num.strip('()')
while True:
ret = re.search('\d+\.?\d*[*/]-?\d+\.?\d*', ret_num)
if ret: # 1-2*-1388335.8476190479
nice = ret.group()
new_num = m_and_d(nice)
print('new_num1:%s'%(new_num))
ret_num = ret_num.replace(nice, new_num)
ret_num = a_and_s(ret_num)
else:
size_num = re.findall('-?\d+\.?\d*', ret_num)
print('size_num:%s'%(size_num))
sums = 0
for i in size_num:
sums += float(i)
return str(sums)
def screen(num):
new_num = num.replace(' ','') # 1. 去空格
while True:
ret = re.search('\([^()]+\)', new_num)
if ret:
ret_num = ret.group()
careful = screen_num(ret_num)
new_num = new_num.replace(ret_num, careful)
print('new_num:%s'%(new_num))
else:
last_num = screen_num(new_num)
return last_num
result = screen(num)
print(result) # 2776672.6952380957