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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式计算 origin = "1 - 2 * ( ( 60 - 30 + ( -40.0 / 5 ) * ( 9 - 2 * 5 / 3 + 7 / 3 * 99 / 4 * 2998相关的知识,希望对你有一定的参考价值。

元字符:
    .    ^    $    *     +     ?     { }     [ ]     |     ( )     \\

技术分享

特殊符号:

\\d 匹配任何十进制数;它相当于类 [0-9]。
\\D 匹配任何非数字字符;它相当于类 [^0-9]。
\\s 匹配任何空白字符;它相当于类 [ \\t\\n\\r\\f\\v]。
\\S 匹配任何非空白字符;它相当于类 [^ \\t\\n\\r\\f\\v]。
\\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\\b: 匹配一个单词边界,也就是指单词和空格间的位置。

 

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 add_op(arg):  # 定义加法函数
    arg = arg.replace("++", "+").replace("--", "+").replace("+-", "-").replace("-+", "-")  # 替换符号
    num = re.findall("([+\\-]?\\d+\\.?\\d*)", arg)  #匹配所有数字
    result = 0
    for i in num:   #循环数字列表进行累加
        result = result + float(i)
    return result

def mul(arg):   #定义乘除函数
    while True:
        result = re.split("(\\d+\\.?\\d*[\\*/][\\+-]?\\d+\\.?\\d*)",arg,1) #匹配乘法或除法
        if len(result) == 3:
            bef,cen,aft = result
            if "*" in cen:  #判断乘号是否在cen里面
                num1,num2 = cen.split("*")  #将乘号进行分割得到乘数
                new_cen = float(num1) * float(num2)     #将乘数相乘得到乘积
                arg = bef +str(new_cen) + aft   #将乘积放入新的字符串表达式
            elif "/" in cen:    #判断除号是否在cen里面
                num1,num2 = cen.split("/")  #分割除号得到除数和被除数
                new_cen = float(num1) / float(num2)     #进行除法运算
                arg = bef + str(new_cen) + aft      #将商放入新的字符串表达式
        else:
            return add_op(arg)

def calc(arg):
    while True:
        arg = arg.replace(" ","")
        result = re.split("\\(([^()]+)\\)",arg,1)     #匹配最里面的括号并且只取括号中的内容
        if len(result) == 3:
            bef,cen,aft = result
            # 计算括号中的表达式,先乘除后加减,得到计算结果
            r = mul(cen)
            #使用计算结果组成新的字符串表达式
            arg = bef + str(r) + aft
        else:   #计算完括号后开始按照先乘除再加减的运算
            return mul(arg)

origin = "1 - 2 * ( (60 - 30 + (-40.0/5) * (9 - 2 * 5/3 + 7 / 3 * 10/4*2 +10 *5/14)) -(-4*3)/(16-3*2))"
r = calc(origin)
print(r)
print(eval(origin))
View Code

 








以上是关于正则表达式计算 origin = "1 - 2 * ( ( 60 - 30 + ( -40.0 / 5 ) * ( 9 - 2 * 5 / 3 + 7 / 3 * 99 / 4 * 2998的主要内容,如果未能解决你的问题,请参考以下文章

如何用正则表达式匹配汉字

正则表达式

带有 Access-Control-Allow-Origin 正则表达式值的 ajax CORS 问题

AWS Api Gateway CORS“访问控制允许来源”正则表达式与 Cloudformation

@CrossOrigin Spring Boot 中的正则表达式

计算机是不是可以通过用户提供的示例“学习”正则表达式?