开发者学堂课程【Python 入门 2020年版:Re.Match 类的介绍 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10443
Re.Match 类的介绍
内容介绍:
一、 re.Match 类介绍
二、 re.Match 属性和方法
三、 group 方法
一、 re.Match 介绍
调用 re.match 方法、re.search 方法,或者对 re.finditer 方法的结果进行遍历时,拿到的数据类型都是 re.Match 对象。
例如:
import re
m = re.search(r'm' , ' o3rjomjadas')
print(m)
输出的结果为:
#<re.Match object; span=(5,6), match= 'm '>
二、 re.Match 属性和方法
如果想看其中有哪些属性哪些方法,使用 dir,可以列出其中所有属性和方法。
print(dir(m))
结果会输出' endpos ', 'expand ', 'group', 'groupdict', 'groups ', 'lastgroup'
等等的很多方法和属性。
(一)、属性和方法
1、pos:搜索的开始位置
2、endpos:搜索的结束位置
3、string:搜索的字符串
4、re:当前使用的正则表达式对象
5、lastindex:最后匹配的组索引
6、lastgroup:最后匹配的组名
7、group(index):某个组匹配的结果
8、groups():所有分组的匹配结果,每个分组组成的结果以列表返回
9、groupdict():返回组名作为 key,每个分组的匹配结果作为 value 的字典
10、start([group]):获取组的开始位置
11、end([group]):获取组的结束位置
12、span([group]):匹配到的结果字符串的开始和结束下标
13、expend([template]):使用组的匹配结果来替换 template 的内容,并把替换后的字符串返回。
字母表达式规则:
表示任意字符;*表示出现任意次数
使用 group 方法可以获取匹配的字符串结果:
print(m.group())
group 可以作参,表示 n 个分组:
print(m.group(0))
(二)、例子
import re
p = re.compile(r"(abc)\1")
m = p.match("abcabcabc")
print m.group(0)
print m.group(1)
print m.group()
p = re.compile(r"(?P<one>abc)(?P=one)")
m = p.search("abcabcabc")
print m.group(0)
print m.group("one")
print m.groupdict().keys()
print m.groupdict().values()
print m.re.pattern
(三)、代码解析
第二行:定义了一个分组 "(abc)", 在后面使用 "\1" 再次调用该分组。即 compile() 返回 1 个包含 2 个分组的正则表达式对象 p.
第三行:p.match() 对字符串 "abcabcabc" 进行搜索,返回一个 match 对象 m
第四行:调用 match 对象的 group(0) 方法,将匹配整个表达式,输出结果: abcabc
第五行:调用 match 对象的 group(1) 方法,返回第一次匹配成功的结果,输出结果为:abc
第六行:默认情况下,返回分组 0 的结果,输出结果:abcabc
第八行:给分组命令,"?P<one>" 中的 "one" 表示分组的名称。"(?P=one)" 调用分组 "one",相当于 "\1"
第十行:输出分组 "one" 的结果,输出结果:abc
第十一行:获取正则表达式中分组的名称,输出结果为 : ['one']
第十二行:获取正则表达式中分组的内容,输出结果为 :['abc']
第十三行:
获取当前使用的正则表达式,输出结果: (?P<one>abc)(?P=one)
print(m.pos,m.endpos)
输出的结果为:0 11
pos 属性表示文本中正则表达式开始搜索的索引。值与 Pattern.match() 和Pattern.seach() 方法中的同名参数相同。
endpos 该属性表示文本中正则表达式结束搜索的索引。值与 Pattern.match( ) 和 Pattern.seach() 方法中的同名参数相同。
print(m.span())
输出的结果为:(5,6)
span 属性表示正则表达式匹配到的结果字符串的开始和结束下标。
三、 group 方法
正则表达式中,group()用来提出分组截获的字符串,()用来分组。
print(m.group())
输出的结果为:mjada
print(m.group(0))
输出的结果为:mjada
print(m.group(1))
输出的结果为:IndexError: no such group
使用 group 方法可以获取匹配的字符串结果# group 可以传参,表示第 n 个分组
(一)、group 方法表示正则表达式的分组:
1. 在正则表达式里使用()表示一个分组
2. 如果没有分组,默认只有一组
3. 分组的下标从开始
group(num=0)
:匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups():返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
m1=re.search(r' (9.*)(0.*)(5.*7)',
'da9fi0riel5kfsda7ifsdaiferit' )
这个正则表达式有 4 个组。
分组 0 : (9.*)(0.*)(5.*7)
第1组:(9.*)
print(m1.group(0))
输出结果为:9fi0riel5kfsda7
第 0 组就是把整个正则表达式当做一个整体。
print(m1.group())
#默认拿第0组。
print(m1.group(1))#9fi
print(m1.group(2))#0riel
print(m1.group(3))#5kfsda7
(二)、groupdict
1、作用:是获取到分组组成的字典
2、例子:
#print(m1. groupdict())
输出结果为:{}
#(?P<name>表达式)可以给分组起一个名字
m2=re.search(r'(9.*)(?P<xxx>0.*)(5.*7)','da9fiorie15kfsda7ifsdaiferit')
print(m2.groupdict())
输出的结果为:{ ' xxx ' : '0riel'},
' xxx '为名字,'0riel'为匹配结果
#可以通过分组名或者分组的下标获取到分组里匹配到的字符串
Print(m2.group(‘xxx’))
m2.group(2)
正则表达式中的三组括号把匹配结果分成三组:
group() 同 group(0)就是匹配正则表达式整体结果,group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。
没有匹配成功的,re.search()返回 None
当然正则表达式中没有括号,group(1) 肯定不对了