findall 与 finditer

40.5 findall 与 finditer

re.findall(模式, 文本) — 返回所有匹配字符串的列表。

re.finditer — 返回 Match 迭代器,数据量大时更省内存。

有分组时 findall 返回元组列表。

找出所有数字和邮箱

# ========================================
# 示例:findall 与 finditer
# 说明:findall 一次拿全部;finditer 逐条处理
# ========================================
import re

text = '联系 a@x.com 或 b@y.com,电话 10086 和 95588'

# findall:所有邮箱
emails = re.findall(r'[\w.-]+@[\w.-]+', text)
print('邮箱列表', emails)

# finditer:逐个 Match 对象
for m in re.finditer(r'\d+', text):
    print('数字', m.group(), '位置', m.start(), '-', m.end())