码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式-计算器

时间:2017-05-01 22:26:33      阅读:470      评论:0      收藏:0      [点我收藏+]

标签:arc   get   wip   pen   img   ace   isp   return   splay   

利用正则表达式计算下面值:

1 - 2 * ( (60 - 30 + (-40.0/5) * (9 - 2 * 5/3 + 7 / 3 * 10/4*2 +10 *5/14)) -(-4*3)/(16-3*2))

 

技术分享
import re

def wipe(s): #定义去除重复+-号函数
    res=s.replace("+-","-").replace("++","+").replace("--","+").replace("-+","-")
    return res

def add_num(s):#定义加减法运算函数
    # s.replace("+-", "-").replace("++", "+").replace("--", "+").replace("-+", "-")
    wipe(s)
    while True:
        res = re.split("([+-]?\d+\.?\d*[\+-][+-]?\d+\.?\d*)", s)
        if len(res) == 3 and "+" in res[1]:
            a, b = res[1].split("+")
            res_s = float(a)+float(b)
            res[1] = res_s
            re.sub("([+-]?\d+\.?\d*[\+-][+-]?\d+\.?\d*)", str(res), s)
        elif len(res) == 3 and "-" in res[1]:
            a, b = res[1].split("-")
            res_s = float(a)-float(b)
            res[1] = res_s
            re.sub("([+-]?\d+\.?\d*[\+-][+-]?\d+\.?\d*)", str(res), s)

def mul(s):#定义乘除法运算
    while True:
        wipe(s)
        res=re.split("([+-]?\d+\.?\d*[\*/][+-]?\d+\.?\d*)", s)
        if len(res)==3 and "*"in res[1]:
            a,b=res[1].split("*")
            res_s=float(a)*float(b)
            res[1]=res_s
            re.sub("([+-]?\d+\.?\d*[\*/][+-]?\d+\.?\d*)",str(res),s)
        elif len(res)==3 and "/"in res[1]:
            a,b=res[1].split("/")
            res_s=float(a)/float(b)
            res[1]=res_s
            re.sub("([+-]?\d+\.?\d*[\*/][+-]?\d+\.?\d*)",str(res),s)



def get(s):#定义取括号内运算式函数
    res=re.sub(" ","",s)
    res1=re.search("\([^()]+\)",res).group()
    res2=res1.strip("()")
    return res2
计算器功能

 

正则表达式-计算器

标签:arc   get   wip   pen   img   ace   isp   return   splay   

原文地址:http://www.cnblogs.com/mrpengfei/p/6792718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!