cxzDay16-总结re模块和全局变量

Day16-re模块和全局变量

一 、re模块

1.re.compile(正则表达式)

根据正则表达式创建一个正则表达式对象。

re_obj = re.compile('\d{3}')
print(re_obj.fullmatch('123'))

2.re.fullmatch(正则表达式, 字符串)

获取字符串和正则表达式完全匹配的结果, 匹配失败返回None, 匹配成功返回匹配对象。

result = re.fullmatch('(\d{3})-([a-z]{2})', '987-sz')
print(result)
  1. 获取匹配到的字符串

匹配对象.group() – 获取整个正则表达式匹配到的结果。
匹配对象.group(N) – 获取表达式中第N个分组匹配到的结果(前提是正则表达式必须有分组)。

print(result.group())    # 987-sz
print(result.group(1))   # 987
print(result.group(2))   # sz
  1. 获取匹配结果在原字符串中的位置信息,返回开始下标和结束下标。
print(result.span())    #  (0,6)
print(result.span(2))   #  (4,6)
  1. 获取原字符串。
print(result.string)

3.re.match(正则表达式, 字符串)

将字符串的开头和正则表达式匹配。

re_str = r'\d{3}'
print(re.fullmatch(re_str, '987'))
print(re.match(re_str, '547gfhdhdg'))

4.re.search(正则表达式, 字符串)

在字符串中查找第一个满足正则表达式的子串 , 如果没有找到返回None,找到了返回匹配对象。

print(re.search(re_str, 'dfhsdg654ggfgj'))

5. re.findall(正则表达式, 字符串)

获取字符串中所有满足正则表达式的子串 , 返回值是列表,列表中的元素是满足正则的子串。

如果正则有一个分组,如果有两个以上的分组,只返回括号里的。

print(re.findall(re_str, 'gsdg987hdhd123sgshsh789'))
print(re.findall(r'\d{2}-[A-Z]{2}', '是噶23-AH规范化和电话57-HJ'))
print(re.findall(r'(\d{2})-[A-Z]{2}', '是噶23-AH规范化和电话57-HJ'))
print(re.findall(r'(\d{2})-([A-Z]{2})', '是噶23-AH规范化和电话57-HJ'))

6. re.finditer(正则表达式, 字符串)

获取字符窜中所有满足正则的子串 , 返回值是一个序列,序列中的元素是匹配的对象。

result = re.finditer(r'(\d{2})-([A-Z]{2})', '是噶23-AH规范化和电话57-HJ')
for x in result:
    print(x.group())

7.re.sub(正则表达式, 字符串1,字符串2)

将字符串2 中所有满足正则表达式的子串替换成字符串1

str2 = '施工23方离开5648的含放大后返回3'
result = re.sub(r'\d+', '+', str2)
print(result)
# 练习:王者荣耀脏话屏蔽功能
sentence = '你丫是傻叉吗? 我操你大爷的. Fuck you.'
result = re.sub(r'(?!)傻\s*(叉|b|B|瓜)f\s*u\s*c\s*k|操|sb', '*', sentence)
print(result)

8.re.split(正则表达式, 字符串)

sentence = '噶1规范a 暖g风机h是是过j分的c话'
result = re.split(r'[a-z]', sentence)
print(result)

二、忽略大小写和单行匹配

1.忽略大小写

# 方法一:在正则表达式的最前面加(?!)
print(re.fullmatch(r'(?!)123[a-z]', '456A'))
# 方法二:flags=re.I
print(re.fullmatch(r'123[a-z]', '123k', flags=re.I))

2. 单行匹配

'''
多行匹配的时候:.不能匹配换行
单行匹配的时候:.可以匹配换行
方法一:在正则表达式的最前面加(?s)
方法二:flags = re.S
'''
print(re.fullmatch(r'123.abc', '123\nabc'))  # None
print(re.fullmatch(r'(?s)123.abc', '123\nabc')) # <re.Match object; span=(0, 7), match='123\nabc'>
print(re.fullmatch(r'123.abc', '123\nabc', flags=re.S))
# 既忽略大小写又单行匹配
print(re.fullmatch(r'(?is)123.abc', '123\nabc'))
print(re.fullmatch(r'123.abc', '123\nabc', flags=re.S|re.I))

三、认识类和对象

1. 什么是类什么是对象

类:就是拥有相同属性和相同功能的对象的集合(抽象的)
对象:就是类的实例(类的具体表现)
如果电脑是类,我桌上的这台电脑就是对象
如果车是类,楼下那辆奔驰就是对象

2.定义类(用代码描述这个类有哪些相同属性和哪些相同功能的对象的集合)

语法:
class 类名:
类的说明文档
类的内容

说明:
class - 关键字;固定写法
类名 - 自己命名,不能是关键字,是标识符。规范:单词首字母大写,见名知义
类的说明文档 – 注释
类的内容 – 主要包含类的属性和方法(方法的本质就是函数)
属性分为:类属性(字段)和对象属性
方法分为:对象/实例方法、类方法和静态方法

3. 创建对象

语法:
对象=类()

class Student:
    '''学生类'''
    pass
    
stu1 = Student()
print(stu1)

4.方法:对象方法、类方法和静态方法

  1. 对象方法

定义:直接定义在类中的函数就是对象方法
怎么调用:要通过对象来调用 – 对象.方法名()
特点:自带参数self ,而且参数self在调用的时候不需要传参,系统会自动将当前对象传给self
就是谁调用,self就指向谁

class Person:
    # eat 就是对象方法
    def eat(self):
        print(self)
        print('吃饭')
    # sleep是对象方法
    def sleep(self):
        print('睡觉')
p = Person()
print(p)   #  self 和p 是一样的
p.eat()  # eat(p)

5.初始化方法

python的类中有一个特殊的对象方法:__init__这个方法在通过类创建对象的时候被自动调用
魔法方法:方法名以__开头并且__结尾,所有的魔法方法都不需要程序员调用,系统自动调用
(1)创建对象的时候会自动调用类中的__init__方法
(2)创建对象1时候需不需要参数,需要几个参数,由类中的__init__方法决定
class Dog:
    def __init__(self):
        print('init被调用')


dog1 = Dog()
dog2 = Dog()


class Cat:
    def __init__(self, name):
        print('猫init', name)


cat1 = Cat('小花')   #创建对象的时候需不需要参数,由init的形参决定

6. 属性

类中的数据信息就是属性,动作信息就是方法, 属性分为类属性(字段)和对象属性。

  1. 类属性

怎么定义:直接定义在类中的变量就是类属性
怎么使用:通过类使用 - 类.类属性
什么时候用:属性值不会因为对象不同而不一样(属性值一样) 例如圆的圆周率

  1. 对象属性

怎么定义:以self.属性名 = 值的形式定义在类中的__init__方法里面
怎么使用:通过对象使用 对象.属性
什么时候用:属性值会因为对象不同而不一样,就定义成对象属性

class Person:
    a = 10   #  a 是类属性

    def __init__(self):
        self.name = '小明'  #  每次创建对象的时候,name的都是小明,创建的时候不可改变
        self.age = 18  # name age 就是对象属性

print(Person.a) # 使用类属性

p1 = Person()
print(p1.name, p1.age)   #  使用对象属性

class Student:
    def __init__(self, n, tel1='110'):
        self.name = n   #  每次创建对象的时候都必须给name属性赋值
        self.study_id = '000'  # 每次创建对象的时候,study_id的都是000,创建的时候不可改
        self.tel = tel1   # 每次创建对象的时候可以选择性的给tel属性赋值或者不赋值
        
# 练习:定义一个矩形类,拥有属性:长和宽 ,拥有方法:计算周长和面积
class Rect:
    def __init__(self, long1=10, wide1=10):
        self.long = long1
        self.wide = wide1
    def area(self):
        s = self.long * self.wide
        print(f'面积{s}')
    def perimeter(self):
        print(f'周长{(self.long+self.wide)*2}')

r1 = Rect(10, 100)
r1.perimeter()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值