re.findall()
是 Python re
模块中的一个函数,用于在字符串中查找所有匹配正则表达式的子串,并返回一个列表。这些子串是与正则表达式模式匹配的部分。re.findall()
适用于当我们想提取字符串中所有符合某个模式的部分时。
基本语法
import re
re.findall(pattern, string, flags=0)
pattern
: 正则表达式模式,它指定了你要匹配的文本模式。string
: 目标字符串,在这个字符串中查找符合模式的所有子串。flags
: 可选参数,用于控制匹配方式。常用的标志有re.IGNORECASE
、re.DOTALL
、re.MULTILINE
等。
返回值
re.findall()
返回一个列表,其中包含所有匹配正则表达式的子串。如果没有找到匹配的子串,则返回空列表 []
。
示例讲解
1. 基本使用
假设我们要从一个字符串中提取所有的数字:
import re
text = "There are 3 apples, 5 bananas, and 12 oranges."
result = re.findall(r'\d+', text)
print(result)
输出:
['3', '5', '12']
在这个例子中:
- 正则表达式
\d+
匹配一个或多个数字。 re.findall()
会返回所有符合\d+
模式的子串,也就是"3"
,"5"
, 和"12"
。
2. 提取单词
如果我们想提取所有的单词:
text = "Hello, world! Let's explore Python."
result = re.findall(r'\b\w+\b', text)
print(result)
输出:
['Hello', 'world', 'Let', 's', 'explore', 'Python']
在这个例子中:
- 正则表达式
\b\w+\b
匹配一个单词边界(\b
),然后是一个或多个字母、数字或下划线(\w+
),最后是另一个单词边界。 - 结果中提取了所有单词,注意这里
"Let's"
被分为"Let"
和"s"
,因为正则模式会将所有非字母字符(如'
)当作分隔符。
3. 使用分组提取特定部分
如果我们使用括号 ()
来分组正则表达式的某部分,re.findall()
会返回匹配的分组(即只返回括号中的部分)。
text = "My email is test@example.com and my friend's email is friend@mail.com."
result = re.findall(r'(\w+)@(\w+\.\w+)', text)
print(result)
输出:
[('test', 'example.com'), ('friend', 'mail.com')]
在这个例子中:
- 正则表达式
(\w+)@(\w+\.\w+)
匹配电子邮件地址。括号中的部分会被捕获并返回。 re.findall()
返回的是一个包含元组的列表,每个元组包含两个部分:用户名和域名。
4. 匹配空白字符
我们还可以匹配空白字符,例如空格、制表符等。
text = "Hello world! This\tis an example."
result = re.findall(r'\s+', text)
print(result)
输出:
[' ', '\t', ' ']
这里:
- 正则表达式
\s+
匹配一个或多个空白字符(包括空格、制表符等)。 - 返回的是文本中所有空白字符的列表。
使用 flags
参数
flags
参数可以用来控制正则表达式的匹配行为,常用的标志包括:
re.IGNORECASE
:忽略大小写。re.DOTALL
:让.
匹配包括换行符在内的所有字符。re.MULTILINE
:使^
和$
匹配每一行的开始和结束。
举个例子,忽略大小写匹配:
text = "Hello World, hello Python!"
result = re.findall(r'hello', text, flags=re.IGNORECASE)
print(result)
输出:
['Hello', 'hello']
总结
re.findall()
是 Python 中非常强大的正则表达式匹配函数,它允许我们在字符串中查找所有符合某种模式的子串。常见的应用包括提取数据(如电话号码、电子邮件、日期等),以及对文本内容的批量处理和过滤。
常见的应用场景包括:
- 文本数据提取
- 数据清洗
- 日志文件分析
- 爬虫抓取
掌握 re.findall()
和正则表达式,可以让你在数据处理中更加高效和灵活。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)