用正则表达式实现 运算 express = '1 -2* ((60-30 +(-40/5) *(9-2*5/3 +7 /3*99 /4*2998 +10 *568 /14))-(-4*...

#!/usr/bin/env python
# coding:utf-8
import  re
def  dealwith(express):
    express.replace('+-','-')
    express.replace('--','+')
    return express
def  col_suanshu(exp):
    if  '/' in exp:
        a,b = exp.split('/')
        return str(float(a)/float(b))
    if  '*'  in  exp:
        a,b = exp.split('*')
        return str(float(a)*float(b))

def   get_no_barcate(express):
    express =express.strip('()')
    print('>>>',express)
    while True:
        ret = re.search("-?\d+\.?\d*[*/]-?\d+\.?\d*",express)
        if  ret :
            res = col_suanshu(ret.group())
            express = express.replace(ret.group(),'+'+res)
            print('表达式',express)
            express = dealwith(express)
        else :
            ret =  re.findall('-?\d+\.?\d*',express)
            sum = 0
            for  i in ret:
                sum +=  float(i)
            return str(sum)

express =  '1  -2* ((60-30  +(-40/5)  *(9-2*5/3 +7 /3*99  /4*2998  +10 *568 /14))-(-4*3)/(16-3*2))'
new_express =  express.replace(' ','')
print(new_express)
print('正确的运算结果',eval(new_express))
while True:
    ret = re.search('\([^()]+\)',new_express)
#    print(ret.group())
    #print(ret.group())
    if  ret:
        barcate_sum = get_no_barcate(ret.group())
        print('返回值',barcate_sum)
        new_express =new_express.replace(ret.group(),barcate_sum)
        new_express= dealwith(new_express)
    else :
         sum = get_no_barcate(new_express)
         print(sum)
         break

 

转载于:https://www.cnblogs.com/weidaijie/p/9747407.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值