python数学公式识别_python用re正则表达式实现数学公式计算

#!/usr/bin/env python

# -*- coding:utf-8 -*-

#Author:QiFeng Zhang

import re

__Author__ = "Faker"

'''计算表达式字符串'''

bracket = re.compile(r"\([^()]+\)") #查找最内层括号

div = re.compile(r"(\d+\.?\d*/-\d+\.?\d*)|(\d+\.?\d*/\d+\.?\d*)") #查找除法运算

mul = re.compile(r"(\d+\.?\d*\*-\d+\.?\d*)|(\d+\.?\d*\*\d+\.?\d*)") #查找乘法运算

add = re.compile(r"(-?\d+\.?\d*\+-\d+\.?\d*)|(-?\d+\.?\d*\+\d+\.?\d*)") #查找加法运算

sub = re.compile(r"(-?\d+\.?\d*--\d+\.?\d*)|(-?\d+\.?\d*-\d+\.?\d*)") #查找减法运算

c_f = re.compile(r"\(?\+?-?\d+\.?\d*\)?") #查找括号内是否运算完毕

strip = re.compile(r"[^(].*[^)]") #去除括号

def Div(s):

'''计算除法'''

exp = re.split(r'/',div.search(s).group()) #将除法表达式拆分成列表

return s.replace(div.search(s).group(),str(float(exp[0])/float(exp[1]))) #计算并用结果替换列表中表达式

def Mul(s):

'''计算乘法'''

exp = re.split(r'\*',mul.search(s).group()) #将乘法表达式拆分成列表

return s.replace(mul.search(s).group(),str(float(exp[0])*float(exp[1]))) #计算并用结果替换列表中表达式

def Add(s):

'''计算加法'''

exp = re.split(r'\+',add.search(s).group()) #将加法表达式拆分成列表

return s.replace(add.search(s).group(),str(float(exp[0])+float(exp[1]))) #计算并用结果替换列表中表达式

def Sub(s):

'''计算减法'''

exp = sub.search(s).group() #去除减法表达式

if exp.startswith('-'): #如果表达式形如:-2.2-1.2;需变换为:-(2.2+1.2)

exp = exp.replace('-', '+') #将-号替换为+号;+2.2+1.2

res = Add(exp).replace('+', '-') #调用Add运算,将返回值+3.4变为-3.4

else:

exp = re.split(r'-',exp)

res = str(float(exp[0]) - float(exp[1]))

return s.replace(sub.search(s).group(),res)

def calc():

while True:

s = input('plase input the key(q for quit)>>>').strip()

if s == 'q': #如果输入q退出

break

else:

s = ''.join([x for x in re.split('\s+',s)]) #去除字符串中的空白字符

if not s.startswith('('): #若字符串不是以括号开始的,增加括号

s = str('(%s)'%s)

while bracket.search(s): #若表达式存在括号,将括号内容取出来存变量

s = s.replace('--','+') #将表达式中的--替换成+

s_search = bracket.search(s).group() #查找最内层括号,将括号内容取出

if div.search(s_search): #如果括号内包含除服,则先算除法

s = s.replace(s_search,Div(s_search)) #替换除法运算

elif mul.search(s_search): #判断是否包含乘法运算

s = s.replace(s_search,Mul(s_search)) #将乘法计算内容替换乘法表达式

elif sub.search(s_search): #判断是否包含减法运算

s = s.replace(s_search,Sub(s_search)) #将减法运算结果替换减法运算表达式

elif add.search(s_search): #判断是否加法运算

s = s.replace(s_search,Add(s_search)) #将加法运算结构调换加法运算表达式

elif c_f.search(s_search): #加减乘除都不含,判断是否有括号

s = s.replace(s_search,strip.search(s_search).group()) #对最终结果执行去括号操作

print('The answer is %.2f'%(float(s)))

if __name__ == "__main__":

calc()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 爬虫中,正则表达式是非常常用的技术,可以帮助我们从网页中提取出需要的信息。下面是一些常用的正则表达式符号和方法: 1. ".":匹配任意单个字符,除了换行符。 2. "^":匹配字符串的开始位置。 3. "$":匹配字符串的结束位置。 4. "*":匹配前一个字符出现 0 次或多次。 5. "+":匹配前一个字符出现 1 次或多次。 6. "?":匹配前一个字符出现 0 次或 1 次。 7. "{m}":匹配前一个字符出现 m 次。 8. "{m,n}":匹配前一个字符出现 m 到 n 次。 9. "(...)":分组匹配,匹配括号内的表达式。 10. "[...]":匹配括号内的任意一个字符。 11. "[^...]":匹配不在括号内的任意一个字符。 12. "\d":匹配数字,等同于 [0-9]。 13. "\D":匹配非数字,等同于 [^0-9]。 14. "\s":匹配空白字符,包括空格、制表符、换行符等。 15. "\S":匹配非空白字符。 16. "\w":匹配单词字符,包括字母、数字、下划线。 17. "\W":匹配非单词字符。 在 Python 中,使用 re 模块进行正则表达式的匹配。常用的方法包括: 1. re.compile(pattern):将正则表达式编译成一个对象,提高匹配效率。 2. re.search(pattern, string):在字符串中搜索匹配正则表达式的第一个位置。 3. re.findall(pattern, string):在字符串中搜索匹配正则表达式的所有位置,并返回一个列表。 4. re.sub(pattern, repl, string):将字符串中所有匹配正则表达式的字符替换为指定的字符串。 以上是一些常用的正则表达式符号和方法,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值