# 1、匹配整数或者小数（包括正数和负数）
# -?\d+(\.\d+)?

# 2、匹配年月日日期 格式2018-12-31
# [1-9]\d{3}-(0?[1-9]|1[0-2])-(0?[1-9]|[12]\d|3[01])

# 3、匹配qq号 5-12
# [1-9]\d{4,11}

# 4、11位的电话号码
# 1[3-9]\d{9}

# 5、长度为8-10位的用户密码 ： 包含数字字母下划线
# \w{8,10}

# 6、匹配验证码：4位数字字母组成的
# [\da-zA-Z]{4}

# 7、匹配邮箱地址 邮箱规则
# 邮箱规则
# @之前必须有内容且只能是字母（大小写）、数字、下划线(_)、减号（-）、点（.）
# @和最后一个点（.）之间必须有内容且只能是字母（大小写）、数字、点（.）、减号（-），且两个点不能挨着
# 最后一个点（.）之后必须有内容且内容只能是字母（大小写）、数字且长度为大于等于2个字节，小于等于6个字节
# [\w\-.]+@[\da-zA-Z\-]+(\.[\da-zA-Z\-]+)*\.[a-zA-Z\d]{2,6}
# 126 163 qq hotmail sina

# 8、从类似
# <a>wahaha</a>
# <b>banana</b>
# <h1>qqxing</h1>
# <h1>q</h1>
# 这样的字符串中，
# 1）匹配出wahaha，banana，qqxing内容。
# 2）匹配出a,b,h1这样的内容
# import re
# ret = re.findall('<(.*?)>(.*?)<.*?>','<a>wahaha</a>')
# print(ret[0][1])
# print(ret[0][0])
# ret = re.findall('<(.*?)>.*?<.*?>','<a>wahaha</a>')
# print(ret)
# ret = re.search('<(.*?)>(.*?)<.*?>','<a>wahaha</a>')
# print(ret.group(2))
# print(ret.group(1))

a = '1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
# 9、1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))
# 1）从上面算式中匹配出最内层小括号以及小括号内的表达式
# \([^()]+\)

# 10、从类似9.0-2.22*5/3+7/3*99/4*2998+10*568/14的表达式中匹配出从左到右第一个乘法或除法
# \d+(\.\d+)?[*/]-?\d+(\.\d+)?

# '2*3/4*5' 乘除法
exp  = '2*3/4*5'
import re
def mul_div(son_exp):
    if '*' in son_exp:
        a, b = son_exp.split('*')
        mul = str(float(a) * float(b))  # 6
        return mul
    elif '/' in son_exp:
        a, b = son_exp.split('/')
        div = str(float(a) / float(b))  # 6
        return div  # '6/4*5

while True:
    ret = re.search('\d+(\.\d+)?[*/]-?\d+(\.\d+)?',exp)
    if ret:
        son_exp = ret.group()   # '2*3'
        res = mul_div(son_exp)
        exp = exp.replace(son_exp,res)
    else:break
print(exp)

