正则计算器
已经不能表达括号,才是最里层,再也没括号
"\([^()]+\)"
strvar = '1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
1. 移除所有括号
2. 计算表达式
def sign_exp(strvar):
strvar.replace("+-","-")
strvar.replace("--","+")
strvar.replace("-+","-")
strvar.replace("++","+")
def calc_exp():
#判定字符串是乘法还是除法
if "*" in strvar:
a,b = strvar.split("*")
return float(a) * float(b)
if "/" in strvar:
a,b = strvar.split("/")
return float(a) / float(b)
def opreate_exp(strvar):
while True
obj = re.search(r"\d+(\.\d+)?[*/][+-]?\d+(\.\d+)?",strvar)
if obj:
res1 = obj.group()
#计算表达式结果
res2 = calc_exp(res1)
# 将所得结果替换到字符串中
strvar = strvar.replace(res1,str(res2))
else:
break
strvar = sign_exp(strvar)
re.findall()
def re_bracket():
while True
obj = re.search("\([^()]+\)",strvar)
if obj:
res1 = obj.group()
# 计算表达式的值
res2 = opreate_exp(res1)
strvar.replace(res1,str(res2))
else:
return strvar
def main():
1. 整理数据
strvar = strvar.replace(" ","")
2. 移除所有括号
strvar = re_bracket(strvar)
3. 计算表达式
return opreate_exp(strvar)
res = main(strvar)
print(res)
<---------------------------------------------------------------------------------->
### ### 正则函数
import re
findall 匹配字符串中相应内容,返回列表 [用法: findall("正则表达式","要匹配的字符串")]
search 通过正则匹配出第一个对象返回,通过group取出对象中的值
match 验证用户输入内容
强制加一个^
'''
search 在正则表达式上加一个^就和match 一模一样 了
'''
split 切割
res = re.split("[|&-]",strvar)
sub 替换
语法 (正则表达式,替换的字符串,原字符串,[可选的替换次数])
subn 替换 跟sub一样,只不过返回的是一个元组
finditer 匹配字符串中相应内容,返回迭代器
from collections import Iterator
strvar = "sdfasf2王振真帅23423"
it = re.finditer(r"\d+",strvar)
print(isinstance(it,Iterator))
for i in it:
print(i.group())
compile 指定一个统一的匹配规则
特点是 可以使正则编译一次,终身受益,无需反复编译,节省空间
#### 正则修饰符
re.L 使匹配对大小写不敏感
pattern = re.compile("正则规则",flags = re.L)
re.M 使每一行都能够单独匹配(多行匹配),影响 ^ 和 $
pattern = re.compile("正则规则",flags = re.M)
re.S 使 . 匹配包括换行在内的所有字符
pattern = re.compile("正则规则",flags = re.S)
<--------------------------------------------------------------------------------->
#### ### 面向对象
class 定义一个类
class Car:
color = "黄色"
def didi(self):
print("车会弟弟的叫")
mycar = Car()
print(mycar.color)
mycar.didi()
#### #### oop 面向对象程序开发
(1)类的定义
class Car:
pass
class Car():
pass
class Car(object):
pass
(2)类的实例化
class Car():
pass
obj = Car()
(3)类的基本结构
类中只有两种
1 成员属性
2 成员方法
类中的代码是可以直接执行的,不要把代码裸露在类中,放入到成员方法中比较好
(4)类的命名 推荐使用大驼峰命名法
王振2020-5-25笔记
最新推荐文章于 2020-05-29 20:43:41 发布