注册

详解Python re.finditer.groups函数:返回所有匹配的子串

Python re 模块 re.finditer.groups 函数

1. 介绍

re.finditer.groups() 函数用于获取所有匹配到的字符串列表。

该函数会将所有匹配到的字符串以元组形式返回,元组中的每个元素表示一个分组捕获到的字符串。

当正则表达式中含有多个分组时,该函数可以方便地获取所有分组捕获到的字符串。

2. 语法

re.finditer.groups() 函数的语法如下:

re.finditer().groups(default=None)

其中,default 是可选参数,表示在正则表达式中未匹配到任何分组时应返回的默认值。

3. 示例

示例 1

下面的示例演示了如何使用 re.finditer.groups() 函数获取正则表达式中所有分组捕获到的字符串列表:

import re

pattern = r"(\d{3})-(\d{3})-(\d{4})"
text = "My phone number is 123-456-7890 and 111-222-3333."

matches = re.finditer(pattern, text)

for match in matches:
    groups = match.groups()
    print(groups)

该示例中的正则表达式匹配美国电话号码格式,其中第一个分组捕获前三个数字,第二个分组捕获中间三个数字,第三个分组捕获后四个数字。

当匹配到两个电话号码时,使用 re.finditer() 函数获取所有匹配项,并使用 re.finditer.groups() 函数分别获取每个匹配项中所有分组捕获到的字符串列表。

输出结果如下:

('123', '456', '7890')
('111', '222', '3333')

示例 2

除了获取分组捕获到的字符串列表外,re.finditer.groups() 函数还可以与正则表达式中的命名分组一起使用。

下面的示例展示了如何在正则表达式中使用命名分组,并使用 re.finditer.groups() 函数获取所有命名分组捕获到的字符串列表:

import re

pattern = r"(?P\d{4})-(?P\d{2})-(?P\d{2})"
text = "Today is 2022-01-01."

matches = re.finditer(pattern, text)

for match in matches:
    groups = match.groupdict()
    print(groups)

该示例中的正则表达式匹配日期格式,其中使用了命名分组 year、month、day 分别匹配年月日三个部分。

使用 re.finditer.groups() 函数获取所有匹配项中所有命名分组捕获到的字符串列表。

输出结果如下:

{'year': '2022', 'month': '01', 'day': '01'}

4. 总结

re.finditer.groups() 函数可以方便地获取正则表达式中所有分组捕获到的字符串列表。使用时,需要注意正则表达式中是否含有多个分组,并根据需要选择是否使用命名分组。