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

#!/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

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

原文地址:https://www.cnblogs.com/weidaijie/p/9747407.html

时间: 2024-10-20 19:01:18

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

正则表达式计算 origin = "1 - 2 * ( ( 60 - 30 + ( -40.0 / 5 ) * ( 9 - 2 * 5 / 3 + 7 / 3 * 99 / 4 * 2998 + 10 * 568 / 14 )) - ( - 4 * 3 ) / ( 16 - 3 * 2))"

1 #!/usr/bin/env python 2 import re 3 def f1(arg): 4 5 return 1 6 7 origin = "1 - 2 * ( ( 60 - 30 + ( -40.0 / 5 ) * ( 9 - 2 * 5 / 3 + 7 / 3 * 99 / 4 * 2998 + 10 * 568 / 14 )) - ( - 4 * 3 ) / ( 16 - 3 * 2))" 8 print(eval(origin)) 9 while True: 10

grep命令以及正则表达式,算数运算.

最近一段时间一直在学习算术运算和正则表达式以及条件判断,连续看了四五遍,基本概念已经能够搞清楚了,实际操作中容易把正则表达式和算术运算以及条件判断混淆.看来还是要勤加联系.今天终于是有勇气来总结这两周的学习.在这之前,因为在练习这些逻辑概念性的知识经常会用到grep命令.首先介绍一下grep. 格式:grep [options] 'PATTERN' file,... grep: 文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示文件中能够被模式所匹配到的行. 模式PATTERN:指

爱根,28行代码版计算器,不知有何纰漏,望大神指正!

1 # s="1 - 2 * ((60 - 30 + (-40 / 5) * (9 - 2 * 5 / 3 + 7 / 3 * 99 / 4 * 2998 + 10 * 568 / 14)) - (-4 * 3) / (16 - 3 * 2))" 2 s=input("please input you number str:") 3 import re 4 s=s.replace(" ","") 5 while True: 6

Python练习-天已经亮了计算器也终于完成了

1 # 编辑者:闫龙 2 import re #导入re模块(正则表达式) 3 calc2 = "1-2*((60-30+(-40/52)*(9-2*5/3+7/3*-99/4*2998+10*568/14))-(-4*3)/(16-3*2))" 4 calc1 = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))" 5 calc = "1-2*((60*30+

利用正则表达式来实现求一个数学表达式的和

1-2*((60-30+(-40.0/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))求上述表达式的结果分析:对于上述表达式,涉及的括号及运算符较多,需使用正则表达式来匹配相应的字符,将字符进行分开计算1.提取最里层括号里面的内容2.计算最里层括号内的乘除运算,并将结果替换到原表达式3.循环执行前两步的结果 1 import re 2 # formula = "1-2*((60-30+(-40.0/5)*(9-2*5/3+7/3*99/

Python全栈之路系列----之-----re模块(正则表达式)

正则表达式并不是python中的一部分,正则表达式适用于处理字符串的强大工具,拥有自己独特的语法,以及独立的处理引擎.在提供了正则表达式的语言中都它的语法是都一样的 re模块本质上和正则表达式没有一毛钱的关系,re模块是python提供给我们方便操作正则的工具而已 正则表达式概念 使用单个字符串规则来描述匹配一系列符合某个句法规则的字符串 是对字符串操作的一种逻辑公式 应用场景:处理文本和数据 正则表示是过程:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功:否则匹配失败 正

Python实战之正则表达式RE/re学习笔记及简单练习

# .,\w,\s,\d,,^,$# *,+,?,{n},{n,},{n,m} # re模块用于对python的正则表达式的操作.## 字符:## . 匹配除换行符以外的任意字符# \w 匹配字母或数字或下划线或汉字# \s 匹配任意的空白符# \d 匹配数字# \b 匹配单词的开始或结束# ^ 匹配字符串的开始# $ 匹配字符串的结束## 次数:## * 重复零次或更多次# + 重复一次或更多次# ? 重复零次或一次# {n} 重复n次# {n,} 重复n次或更多次# {n,m} 重复n到m次

用python的正则表达式实现简单的计算器功能

#!/usr/bin/env python # -*- coding:utf-8 -*- import sys import re def welcome_func(): """ 输入判断 :param expression: 表达式 :return: 返回有效表达式 """ welcome_str = "超级计算器" print(welcome_str.center(50,'*'),'\n') # 输出欢迎界面 while

D05——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime (3)random (4)os (5)sys (6)json&pickle (7)shelve (8)xml (9)shutil (10)PyYaml (11)configpaser (12)hashlib (13)re 5 练习:开发一个简单的python计算器(挑战性很强) 1 模块 模块: &g