Python正则表达式

继承和重写

一、继承:在python中,是为了最大程度减少代码量。
被继承的类叫做父类、基类、超类。继承的类叫做子类、衍生类
子类能够继承父类的属性和方法,一个子类可以继承多个类,也可以间接继承。

隔壁老王是煎饼果子名人,他有一天干不动了,但是不想让她探索几十年的秘籍流失
所以隔壁老王将秘籍传给了他在儿子 王二麻子
class Father:
def init(self,name=‘隔壁老王’,kungfu=‘《宝典》’):
self.name=name
self.kungfu=kungfu

def cook(self):
    return f'{self.name}能够根据{self.kungfu}做出美味的煎饼果子'

F1=Father()
print(F1.cook())

继承的语法: 类名后面添加小括号,小括号中写被继承的父类的类名

class Son(Father):
子类还可以拥有自己的属性,但是子类一旦拥有了自己的属性,她将不在自动继承父类的属性
def init(self,age):
子类的超类的初始化属性
super(Son,self).init()
直接将父类的属性拿过来,使用self 传值
Father.init(self)

    self.age=age

子类虽然继承了父类,但是子类还可以拥有自己的方法
王二麻子还想学习新的宝典…学成归来
def newCook(self,book):
return f’{self.name}学成归来,能偶根据{book}制作出美味的新式煎饼果子’

重写父类的方法
def cook(self):
return f’{self.name}根据《煎饼果子秘籍》和《新式煎饼果子秘籍》改良出了更好吃的煎饼果子’

子类重写父类的方法后还想在使用父类的方法
def olCook(self):
return super(Son,self).cook()

S1=Son(‘王二麻子’)
S1.name=‘王二麻子’
print(S1.cook())
print(S1.newCook(‘《新式煎饼果子》’))
print(S1.olCook())

王二麻子将父亲的煎饼果子发扬光大,年纪轻轻月工资就达到3200,走向人生巅峰
王二麻子退休后又想将自己的一身技能传给儿子。

魔法方法 mro:使用这个魔法方法能够看到继承的顺序,python中所有类都有一个顶级类object
print(Son.mro)

练习

定义一个类,能够计算一条线段的长度。在定义一个圆类,这个圆类能够计算圆心到原点的距离。
class line:
def init(self, point1, point2):
self.point1 = point1
self.point2 = point2

def distance(self):
    return ((self.point1[0] - self.point2[0]) ** 2 + (self.point1[1] - self.point2[1]) ** 2) ** 0.5

l1 = line((10, 20), (3, 4))
print(l1.distance())

class Cricle(line):
pi = 3.14

def __init__(self, r, point):
    self.r = r
    self.point = point

def distance(self, origin):
    return ((self.point[0] - origin[0]) ** 2 + (self.point[1] - origin[1]) ** 2) ** 0.5

C1 = Cricle(3, (3, 4))
print(C1.distance((0, 0)))

正则表达式

  1. 正则表达式是使用一系列特殊符号中从字符串的匹配内容
    正则表达式是独立所有语言的语法,所有语言中正则表达式的语法是相同的,只 是使用方式不一样

  2. fullmatch(正则表达式,字符串):判断字符串是否完全符合正则表达式的规则,
    成立返回一个对象, 不成立返回None

  3. 通配符:.(点),可以匹配任意一个符号

  4. \d:匹配0-9数字
    \D:匹配非数字
    \s :匹配空白符号(空格,\n,\t,\v等)
    \S :匹配非空白符号
    \w:匹配数字、字母、下划线、中午、朝鲜语。

  5. 常见的字符集
    [a-z]:表示匹配小写字母中的任意一个
    [A-Z]:表示匹配大写字母中的任意一个
    [0-9]:匹配0-9中的任意一个数字
    [\u4e00-\u9fa5]:匹配任意一个汉族
    [a-zA-Z]:匹配任意一个字母
    [0-9a-zA-Z\u4e00-\u9fa5]:匹配数字,字母,汉字中的任意一个

  6. [^字符集]:匹配不在字符集中的元素字符集的规则没有变, 必须在字符集的最开头添加^

  7. ?:匹配0此或1次
    +:匹配一次或多次
    *匹配任意次数
    {M}:匹配M次
    {N}:匹配N次
    {M,N}: 最少匹配M次 最多匹配N次
    {M,}:最少匹配M次
    {,N}:最多匹配N次最少匹配0次

  8. 贪婪和非贪婪
    默认所有次数不确定的匹配都是贪婪的(一次性匹配更多的元素):比如:+、、{,N}、{M,}等
    非贪婪就是一次匹配取最短长度的结果,在非贪婪设计的符号基础上添加一个?即可,+?、
    ?、{,N}?等

分组和分支

分支:|(或者)
import re

str1=‘abcabd’
分别匹配出abc和abd
re_str=‘[aba-z]{3}’
print(re.findall(re_str,str1))
通配符放到[]中特殊意义消失
re_str=‘abc|abd’
print(re.findall(re_str,str1))

分组:()
1.能够将同类项提出来。
2.能够将分组中的结果重复.
str1=‘abcabd’
re_str=‘(ab(c|d))’
print(re.findall(re_str,str1))

str2 = ‘1234==12341234’
re_str=r’(\d{4})(=)\2\1\1’
如果字符串后面再次出现过前面匹配过的结果,可以将前面的结果使用分组包围起来。
结合\N(N是数字,代表第N个分组)的语法,可以将前面N个分组的结果重复使用
print(re.fullmatch(re_str,str2))

正则表达式不是转义字符,在写正则表达式时,在正则表达式前面加r或者R

正则表达式的方法

fullmatch、findall、split、sub、search、match

fullmatch:产看整个字符串是否符合正则表达式。None
findall
方法一、将字符串中所有符合正则表达式的规则结果匹配出来。
方法二、如何正则表达式中出现分组,会按照正则表达式匹配结果,再将符合分组中正则表达式的结果提出
split:按照正则表达式的规则切割字符串
sub:将符合正则表达式的字符串替换为新的字符串
search:查找字符串中第一个符合正则表达式的结果:None
match:查看字符串的开头是否符合正则表达式的规则None

常用:findall , split , sub
不常用: match , search , fullmatch

匹配平年正确的日期格式:2-29(错)1-30\1-30(对)

import re
2-28 , 13578、10、12-31
datalist=[‘2-28’,‘2-29’,‘1-31’,‘1-32’,‘4-30’,‘4-31’,‘12-31’]
re_str=‘([13578]|1[02]-([1-9]|[12]\d|3[01]))’

re_str1=‘2-([1-9]|1\d|2[0-8])’

re_str2=‘(469]|11)-([1-9]|[12]\d|30)’

new_str = f’{re_str}|{re_str1}|{re_str2}’
for i in datalist:
if re.fullmatch(new_str,i)!=None:
print(i,True)
else:
print(i,False)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值