上一篇:正则查找相关的方法 | 手把手教你入门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'>
这个类⾥定义了相关的属性,可以直接让我们来使⽤。
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
模块的 match
,search
,findall
等⽅法,传⼊指定的正则表达式。同时,也可以调⽤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')