正则表达式-计算器

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

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

计算器功能

时间: 2024-08-02 02:50:53

正则表达式-计算器的相关文章

常用标准库

模块简介模块分类导入模块re元字符matchDeomseachDeomfindallDeomsubDeomsplitDeom常用正则表达式计算器的实现替换ossys进度条subprocessshell相关模块callcheck_callcheck_outputsubprocess.Popen(-)执行普通命令shutil shelve itertoolsshutilzipfile解压缩tarfile解压缩hashlib(密码加盐)logging单文件日志日志等级:日志记录格式多文件日志日志一日志

C++实现简易计算器(正则表达式计算)

说明:简单高效的C++代码,实现简易计算器(正则表达式计算),允许小数.括号.但没有表达式正误检验功能,所以测试前请确保式子正确哦 数据结构:栈 示范输入: ((1.5+2.5)*3-4)+5 42/7-(12+3)*0.5 标准输出: the answer is 13 the answer is -1.5 源代码: #include <iostream>#include <stack> using namespace std; stack<double> number

Python基础篇【第十一篇】:正则表达式之计算器

1.首先写运算式的正则表达式(加减,乘除,乘负数,除负数,匹配括号最里层) l1_expression = re.compile(r'(-?\d+)(\.\d+)?[-+](-?\d+)(\.\d+)?') #匹配加减的正则表达式 l2_expression = re.compile(r'(-?\d+)(\.\d+)?[/*](-?\d+)(\.\d+)?') #匹配乘除的正则表达式 l3_expression = re.compile(r'(-?\d+)(\.\d+)?\*-(-?\d+)(\

Python 迭代器&amp;生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致 迭代器&

python--------re 正则表达式(计算器)

re是一门小型语言 元字符 .      通配符除了\n ^     以什么开始的匹配 $     以什么结尾的匹配 *     重复前一个条件,最少0个,[0,∞] +     重复前一个条件,最少1个,[1,∞] ?   重复前面的条件,最少0个,最多1个[0,1] {x}  重复前面的x次,x为数字,{x,y}最少x次,最多y-1次,{x,}最少x次,最多不限 |     或的意思 \ 反斜杠后跟元字符去除特殊功能 \. 就是匹配点. \+ 匹配+ \\\\ 匹配\ 等于 r"\\&quo

【小程序】计算器(使用正则表达式实现)

功能: 实现加减乘除及拓号优先级解析 用户输入 1-2*((60-30+(-40/5)*(9-2*5/3-2*(-18.3/3-(5*2+3+(-2*3)*(-7-1)/(5*7)*2)+2/6*7)+(-6+5+1)-7/3*99/4*(-2998)/3+10*568/14))-(-4*3)/(16-3*2))+(2+3*2)+(2-3) 类似公式后,通过正则表达式解析里面的(),+,-,*,/符号和公式,运算后得出结果 # Author:q1.ang import re content=in

正则表达式实现计算器

计算器:实现带括号的+ - * /运算需求分析: 8*5-2+(10-(8*5+6)/10+5)*(3-2)+8*(9-4) 1.从前到后找,找到第一个以(开始)结尾,中间不含有括号的表达式 2.正则表达式:\(^()\)定义两个函数: 1.def 处理加减乘除(表达式): return 结果 2.def 处理括号(表达式): while True: #先找到第一个,分割成三部分,得到括号内的表达式,不要括号 re.split('\( [^()] \)',表达式,1) #8*5-2+(10- 8

Python编写简单计算器(正则表达式应用)

需求——开发一个简单的Python计算器 1.实现加减乘除以及括号优先级解析2.用户输入3+5*((80-40+(-40/8)*(9-2*9/3-5/3*98/4*2998+10*568/14))-(-4*6)/(27-3*8))等类似公式后,必须自己解析出里面的各种符号(不得调用eval等偷懒),运算后得出结果,结果要正确. 总程序 1 import re 2 #一.对公式进行简单处理(去掉空格及公式化简) 3 def format_string(string): 4 string = str

【Python】使用正则表达式实现计算器练习

已知有以下这样一个不太友好的公式: 1 - 2 * ( (60-30 +(-9-2-5-2*3-5/3-40*4/2-3/5+6*3) * (-9-2-5-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) ) 我们使用正则表达式的基础来练习,将此结果计算出来. 代码如下: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import re 5 import functool