re.findall()用于查找字符串中所有匹配正则表达式的内容并返回列表,若无匹配则返回空列表。其语法为re.findall(pattern, string, flags=0),其中pattern是正则表达式,string是要搜索的文本,flags为可选标志如re.IGNORECASE。例如提取数字:text = "我有3个苹果和5个橙子,一共8个水果",使用re.findall(r'\d+', text)得到['3', '5', '8'],\d+匹配一个或多个数字。提取邮箱地址时,使用re.findall(r'\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}\b', text),可匹配如'tom@abc.com'和'jerry@xyz.org'。当正则中包含捕获分组(括号)时,findall返回分组内容而非整个匹配;例如text = "姓名:张三,年龄:25;姓名:李四,年龄:30",执行re.findall(r'姓名:(\w+),年龄:(\d+)', text)得到[('张三', '25'), ('李四', '30')],即元组列表;若只有一个分组,则返回字符串列表。通过flags参数可实现忽略大小写等扩展功能,如re.findall(r'python', "Python is

Python 的 re.findall() 方法用于查找字符串中所有与正则表达式匹配的内容,并以列表形式返回。如果找不到匹配项,返回空列表。
基本语法
使用方法如下:
re.findall(pattern, string, flags=0)- pattern:正则表达式模式
- string:要搜索的字符串
- flags:可选标志,如 re.IGNORECASE、re.DOTALL 等
简单示例
从一段文本中提取所有数字:
import retext = "我有3个苹果和5个橙子,一共8个水果"
numbers = re.findall(r'\d+', text)
print(numbers) # 输出: ['3', '5', '8']
r'\d+' 表示匹配一个或多个数字。
立即学习“Python免费学习笔记(深入)”;
提取特定内容
比如提取所有邮箱地址:
text = "联系我:tom@abc.com 或 jerry@xyz.org"emails = re.findall(r'\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b', text)
print(emails) # 输出: ['tom@abc.com', 'jerry@xyz.org']
分组的影响
当模式中包含捕获分组(括号)时,findall 返回的是分组内容,而不是整个匹配。
text = "姓名:张三,年龄:25;姓名:李四,年龄:30"result = re.findall(r'姓名:(\w+),年龄:(\d+)', text)
print(result) # 输出: [('张三', '25'), ('李四', '30')]
此时返回的是元组列表,每个元组对应一个匹配中的分组。
如果只有一个分组,返回值是字符串列表。
忽略大小写等选项
使用 flags 参数扩展匹配能力:
text = "Python is great. I love python!"matches = re.findall(r'python', text, re.IGNORECASE)
print(matches) # 输出: ['Python', 'python']
基本上就这些。掌握 findall 的关键是理解正则模式和分组行为。实际使用时多测试即可。










