正则写计算器

使用正则编写一个计算器

之前看到网上有很多网友在问正则表达式去编写计算器的代码,也有很多网友放出了自己的代码,所以利用空闲时间
自己也写了一个,时间匆忙可能代码有些小瑕疵不排除会有bug. 还是那句话进攻参考:

import re
unm="1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14) ) - (-4*3)/ (16-3*2) )"
unm=unm.replace(" ","")
def multiplication(unm2):                #第一步去除括号
    tag=True
    while tag:
        if re.search("([^()]+)+",unm2) and tag:
            ret=re.search("([^()]+)",unm2)        #将括号过滤出来
            ret1=ret.group()
            ret2=re.search("[^()]+",ret1)
            ret3=ret2.group()
            p=kuohao(ret3)                           #括号去除后交给乘除法函数
            p=str(p)
            unm2=unm2.replace(ret1,p)
        else:
            p=kuohao(unm2)
            print(p)
            break
def kuohao(k):     #乘除法的运算
    tag=True
    while tag:
        if re.search("(?:d+)?.?d+?[*|/](-|+)?(?:d+)?.?(?:d+)?",k) and tag:
            ret=re.search("(?:d+)?.?d+?[*|/](-|+)?(?:d+)?.?(?:d+)?",k)
            ret1=ret.group()
            if "/" in ret1:
                j=re.split("/",ret1)
                o=float(j[0])/float(j[1])                        #运算的结果
                o=str(o)
                k=k.replace(ret1,o)        #将运算结果替换至未运算之前
            elif "*" in ret1:
                j=re.split("*",ret1)
                o=float(j[0])*float(j[1])
                o=str(o)
                k=k.replace(ret1,o)
        else:
            add_subtract(k)
            return (add_subtract(k))
def add_subtract(k):      #加减法运算(最终的结果)
    tag=True
    while tag:
      k=re.sub("--","+",re.sub("++","+",re.sub("-+","-",re.sub("+-","-",k))))  #将重复的加减运算符替换
      if re.search("(?:d+)?.?d+?[-](?:d+)?.?(?:d+)?",k) and tag:
            ret=re.search("(?:d+)?.?d+?[-](?:d+)?.?(?:d+)?",k)
            ret1=(ret.group())
            j=re.split("-",ret1)
            o=float(j[0])-float(j[1])
            o=str(o)
            k=k.replace(ret1,o)
      elif re.search("(?:d+)?.?d+?[+](?:d+)?.?(?:d+)?",k) and tag:
            ret=re.search("(?:d+)?.?d+?[+](?:d+)?.?(?:d+)?",k)
            ret1=(ret.group())
            j=re.split("+",ret1)
            o=float(j[0])+float(j[1])
            o=str(o)
            k=k.replace(ret1,o)
      else:
          return k
multiplication(unm)

原文地址:https://www.cnblogs.com/lijian-22huxiaoshan/p/7171942.html