1、首先看match和search的区别,每个print对应的输出在注释中标明。
import re
'''
在Python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string,不要转意backslash "\" 。 "\n" 在raw string中,
是两个字符,"\"和"n",而不会转意为换行符。由于正则表达式和"\"会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上'r'。
'''
'''
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
而re.search匹配整个字符串,直到找到一个匹配。
'''
email = 'Cedar_Sia@test1.com'
p1 = r'@test1\.com'
p2 = r'Cedar'
print('p1',p1)# p1 @test1\.com
print('p2',p2)# p2 Cedar
m = re.search(p1, email)
print("search",m)
print("search.group:",m.group())
print("search.groups:",m.groups())#
print("search.start", m.start())#起始位置
print("search.end", m.end())#结束位置
print("search.length",m.span())#跨度
'''
search <re.Match object; span=(9, 19), match='@test1.com'>
search.group: @test1.com
search.groups: ()
search.start 9
search.end 19
search.length (9, 19)
'''
m = re.match(p1, email)
print("match p1:",m)
m = re.match(p2, email)
print("match p2:",m)
print("match.group:",m.group())
print("match.groups:",m.groups())
print("match.start", m.start())#起始位置
print("match.end", m.end())#结束位置
print("match.length",m.span())#跨度
'''
match p1: None
match p2: <re.Match object; span=(0, 5), match='Cedar'>
match.group: Cedar
match.groups: ()
match.start 0
match.end 5
match.length (0, 5)
'''
2、关于group和groups:
查阅的资料说明如下:
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
group(0)和group()效果相同,均为获取取得的字符串整体。
p2 = r'(\d)(\s)([a-z])'#加()是对正则表达式分组,代表数字是第一组、空格是第二组、字母是第三组
message2 = '3 a'
m = re.search(p2, message2)
print('数字空格字母:', m)#
group1 = m.group(1)#第一组数字
print(group1)
group1 = m.groups()#相当于m.groups() == (m.group(0), m.group(1), ...)
print(group1)
print(type(group1))
'''
数字空格字母: <re.Match object; span=(0, 3), match='3 a'>
3
('3', ' ', 'a')
<class 'tuple'>
'''
来源:CSDN
作者:CedarSia
链接:https://blog.csdn.net/CedarSia/article/details/104114367