正则表达式计算 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))
以上是关于正则表达式计算 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