若re模块的match()、search()函数匹配成功,会返回Match对象,若匹配失败会返回None。
对象的方法
使用Match对象可以获取匹配的结果,Match对象的主要方法如下表所示。

注释(1)
方法声明:
group([group1, ...])
返回一个或者多个匹配的子组。如果只有一个参数,结果就是一个字符串,如果有多个参数,结果就是一个元组(每个参数对应一个项),如果没有参数,组1默认为0(整个匹配都被返回)。
如果一个组N 参数值为 0,相应的返回值就是整个匹配字符串;如果它是一个范围 [1..99],结果就是相应的括号组字符串。
[group1, ...]并不是要传入一个列表实参,而是要传入对应group1, ...的组号。
案例代码:
import re
# 正则表示式
pattern = "(\w+) (\w+)"
# 使用re模块mathc函数进行匹配
m = re.match(pattern, 'Isaac Newton, physicist')
if m:
print(m.group(0,1,2))
group传入的第1个参数的值是0,它会返回整个匹配的字符串,传入第2个参数的值是1,它会返回匹配的第一个括号组字符串Isaac,传入第2个参数的值是2,它会返回匹配的第一个括号组字符串Newton。
程序执行结果如下所示:
('Isaac Newton', 'Isaac', 'Newton')
注释(2)
方法声明:
groups(default=None)
返回一个元组,包含所有匹配的子组,在匹配模式中出现的从1到任意多的组合,default 参数用于不参与匹配的情况,默认为 None。
案例代码:
import re
# 正则表示式
pattern = "(\d+)\.(\d+)"
# 使用re模块mathc函数进行匹配
m = re.match(pattern, '36.891')
if m:
print(m.groups())
案例代码执行结果如下所示:
('36', '891')
注释(3)
方法声明:
groupdict(default=None)
返回一个字典,包含了所有的命名子组。key就是组名。 default 参数用于不参与匹配的组合;默认为 None,命名子组为符合(?P<name>…)规则的正则表达式。
案例代码:
import re
# 正则表示式
pattern = "(?P<first_name>\w+) (?P<last_name>\w+)"
# 使用re模块mathc函数进行匹配
m = re.match(pattern, 'Malcolm Reynolds')
if m:
print(m.groupdict())
案例代码使用(?P<name>…)规则定义了两个匹配子组,第1个匹配子组的名称是first_name,第2个匹配子组的名称是last_name。
案例代码执行结果如下所示:
{'first_name': 'Malcolm', 'last_name': 'Reynolds'}
注释(4)
方法声明:
start([group])
end([group])
start([group])返回匹配到的字串的开始标号,end([group])返回匹配到字符串的结束标号。group 默认为0(意思是整个匹配的子串)。如果 group 存在,但未产生匹配,就返回 -1。
案例代码:
import re
# 正则表示式
email = "tony@tiremove_thisger.net"
# 使用re模块mathc函数进行匹配
m = re.search("remove_this", email)
if m:
print(m.start(),m.end())
案例代码使用search函数查询email的子串,若查询成功,m.start()返回子串的起始索引,m.end()返回子串的终止索引。
注释(5)
方法声明:
span([group])
返回匹配字符串的起始索引和终止索引,返回方式为二元组(m.start(group), m.end(group)),group是匹配的组号,默认值是0.
案例代码:
import re
# 正则表示式
pattern = "(\w+) (\w+)"
# 使用re模块mathc函数进行匹配
m = re.match(pattern, 'Isaac Newton, physicist')
if m:
print("匹配子串%s的索引为:%s" % (m.group(2),m.span(2)))
程序执行结果如下所示:
匹配子串Newton的索引为:(6, 12)
对象的属性
Match对象的主要属性如下表所示。