re 模块是 Python 中用来操作正则表达式的库。其中,re.finditer() 是一个函数,用于在字符串中查找并迭代所有匹配的结果。re.finditer().groupdict() 是 re.finditer() 函数的变体,它把每个匹配数据封装到一个 Python 字典中,提供更方便的访问方式。下面是该函数的详细攻略:
re.finditer() 函数
作用
用于在字符串中查找所有匹配的结果,并将每个匹配数据返回给调用者。
语法
re.finditer(pattern, string, flags=0)
其中,
pattern
表示正则表达式模式,用于匹配字符串。string
表示要搜索的字符串。flags
是可选参数,用于指定正则表达式的匹配模式。
返回值
re.finditer() 返回一个迭代器对象,该迭代器对象可以用来迭代所有匹配模式的结果。每次迭代返回一个包含匹配数据的 MatchObject 对象,其中包含以下属性和方法:
- group() 返回匹配到的字符串。
- start() 返回匹配字符串的开始位置。
- end() 返回匹配字符串的结束位置。
- span() 返回匹配字符串的开始和结束位置,以元组的形式返回。
实例1:
假设需要匹配字符串中所有数字的出现位置,代码如下:
import re
s = "apple1234orange5678pear9012"
pattern = "\\d+"
iter = re.finditer(pattern, s)
for match in iter:
print(match.group(), match.start(), match.end())
输出结果如下:
1234 5 9
5678 12 16
9012 20 24
实例2:
假设需要匹配字符串中所有单词的出现位置,代码如下:
import re
s = "The quick brown fox jumps over the lazy dog."
pattern = "\\w+"
iter = re.finditer(pattern, s)
for match in iter:
print(match.group(), match.start(), match.end())
输出结果如下:
The 0 3
quick 4 9
brown 10 15
fox 16 19
jumps 20 25
over 26 30
the 31 34
lazy 35 39
dog 40 43
re.finditer().groupdict() 函数
作用
将 re.finditer() 函数的返回值转换为 Python 字典,方便使用。
语法
re.finditer(pattern, string, flags=0).groupdict(default=None)
其中,
pattern
表示正则表达式模式,用于匹配字符串。string
表示要搜索的字符串。flags
是可选参数,用于指定正则表达式的匹配模式。default
是可选参数,用于指定没有匹配到结果时的默认字典项。
返回值
返回一个字典,其中字典的每个键表示匹配数据的名称(如正则表达式中的命名组),键对应的值就是该匹配项的值。
实例1:
假设需要匹配邮件地址中的用户名和域名,代码如下:
import re
s = "abc123@gmail.com, 456def@yahoo.com"
pattern = "(?P<user>\\w+)@(?P<domain>\\w+\\.\\w+)"
for match in re.finditer(pattern, s):
print(match.groupdict())
输出结果如下:
{'user': 'abc123', 'domain': 'gmail.com'}
{'user': '456def', 'domain': 'yahoo.com'}
实例2:
假设需要匹配超链接中的文本和 URL,代码如下:
import re
s = '<a href="http://www.baidu.com">百度</a>, <a href="http://www.google.com">谷歌</a>'
pattern = '<a href="(?P<url>.*?)">(?P<text>.*?)</a>'
for match in re.finditer(pattern, s):
print(match.groupdict())
输出结果如下:
{'url': 'http://www.baidu.com', 'text': '百度'}
{'url': 'http://www.google.com', 'text': '谷歌'}