Re.Match类的介绍 | 手把手教你入门Python之八十六

上一篇:正则查找相关的方法 | 手把手教你入门Python之八十五
下一篇:正则修饰符的使用 | 手把手教你入门Python之八十七

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

Re.Match类的介绍

当我们调⽤ re.match ⽅法、 re.search ⽅法,或者对 re.finditer ⽅法的结果进⾏迭代时,拿到的数据类型都是 re.Match 对象。

x = re.match(r'h','hello')
y = re.search(r'e','hello')
z = re.finditer(r'l','hello')
print(type(x)) # <class 're.Match'>
print(type(y)) # <class 're.Match'>
for a in z:
    print(type(a)) # <class 're.Match'>

这个类⾥定义了相关的属性,可以直接让我们来使⽤。
Re.Match类的介绍 | 手把手教你入门Python之八十六

ret = re.search(r'(abc)+', 'xxxabcabcabcdef')
print(ret.pos) # 搜索开始的位置,默认是0
print(ret.endpos) # 搜索结束的位置,默认是字符串的⻓度
print(ret.group(0)) # abcabcabc 匹配整个表达式
print(ret.group(1)) # abc 第⼀次匹配到的结果
print(ret.span()) # (3, 12) 开始和结束位置
print(ret.groups()) # 表示当正则表达式⾥有多个分组时,多个分组的匹配结果

group方法表示正则表达式的分组:
1、在正则表达式里使用 () 表示一个分组
2、如果没有分组,默认只有一组
3、分组的下标从 0 开始

# 正则表达式有 4 个分组
m1 = re.search(r'(9.*)(0.*)(5.*7)', 'da9fi0rie15kfsda7ifsdaiferit')
print(m1.group(0)) # 第 0 组就是把整个表达式当做一个整体
print(m1.group()) # 默认就是拿第 0 组
print(m1.group(1))  # 9fi
print(m1.group(2)) # 0riel
print(m1.group(3)) # 5kfsda7

print(m1.groups())  # ('9fi', '0riel', '5kfsda7')
# groupdict 作用是获取到分组组成的字典
# print(m1.groupdict())  # {}

# (?P<name>表达式)  可以给分组起一个名字
m2 = re.search(r'(9.*)(?P<xxx>0.*)(5.*7)', 'da9fi0rie15kfsda7ifsdaiferit')
print(m2.groupdict())  # {'xxx': '0riel'}
print(m2.groupdict('xxx'))  # {'xxx': '0riel'}

# 可以通过分组名或者分组的下标获取到分组里匹配到的字符串
print(m2.group('xxx'))
m2.group(2)

re.compile⽅法的使⽤

我们在使⽤正则表达式时,可以直接调⽤ re 模块的 matchsearchfindall 等⽅法,传⼊指定的正则表达式。同时,也可以调⽤re.compile⽅法,⽣成⼀个正则表达式对象,再调⽤这个正则表达式对象的相关⽅法实现匹配。
示例:

re.match(r'h','hello') # 可以使⽤re.match⽅法直接匹配
# 也可以调⽤re模块的compile⽅法,⽣成⼀个 Pattern 对象,再调⽤ Pattern 对象的 match⽅法
regex = re.compile(r'h')
regex.match('hello')

re.search(r'l','hello')
regex = re.compile(r'l')
regex.match('hello')

regex = re.compile(r'l')
regex.findall('hello')

regex = re.complie(r'l')
regex.finditer('hello')

配套视频

上一篇:2016年9月钓鱼网站报告:414家银行网站遭仿冒


下一篇:[WPF疑难]如何禁用窗口上的关闭按钮