一、一见钟情的match:从字符串的起始位置匹配,成功则返回第一个匹配对象,失败则返回None。
import re
str = '98.5分,89分'
res = re.match(r'\d+\.?\d*', str)
print(res)
print(res.group(0))
<re.Match object; span=(0, 4), match='98.5'>
98.5
# 从起始位置匹配失败。
str = '语文:98.5分,数学:89分'
res = re.match(r'\d+\.?\d*', str)
print(res)
None
二、从一而终的search:搜索整个字符串,并返回第一个成功的匹配对象,失败也返回None。
str = '语文:98.5分,数学:89分'
res = re.search(r'\d+\.?\d*', str)
print(res)
print(res.group(0))
<re.Match object; span=(3, 7), match='98.5'>
98.5
三、多情种findall:返回成功匹配的所有子字符串,并返回一个列表,若没有找到匹配,则返回空列表。
str = '语文:98.5分,数学:89分'
res = re.findall(r'\d+\.?\d*', str)
print(res)
['98.5', '89']
str = '语文:无,数学:无'
res = re.findall(r'\d+\.?\d*', str)
print(res)
[]
四、一次匹配多组的情况
str = '98.5分,89分;60.5分,70.5分'
res = re.match(r'(\d+\.?\d*)分,(\d+\.?\d*)分', str)
# 返回匹配整个正则表达式的字符串。
print('group(0):', res.group(0))
# 返回匹配第1个组(组号从1开始)的子字符串。
print('group(1):', res.group(1))
# 返回匹配第2个组(组号从1开始)的子字符串。
print('group(2):', res.group(2))
group(0): 98.5分,89分
group(1): 98.5
group(2): 89
str = '98.5分,89分;60.5分,70.5分'
res = re.search(r'(\d+\.?\d*)分,(\d+\.?\d*)分', str)
# 返回匹配所有小组的子字符串的一个元组。
print('groups():', res.groups())
groups(): ('98.5', '89')
str = '98.5分,89分;60.5分,70.5分'
# 可对各小组起名标识。
res = re.search(r'(?P<Chinese>\d+\.?\d*)分,(?P<Maths>\d+\.?\d*)分', str)
# 返回一个匹配所有命名小组的字典。
print('groupdict():', res.groupdict())
groupdict(): {'Chinese': '98.5', 'Maths': '89'}
str = '98.5分,89分;60.5分,70.5分'
res = re.findall(r'(\d+\.?\d*)分,(\d+\.?\d*)分', str)
print(res)
[('98.5', '89'), ('60.5', '70.5')]