17.2 re 模块:匹配、搜索、查找与替换
Python re Module 入门教程:掌握匹配、搜索、查找与替换
这篇Python学习教程详细介绍了re模块的用法,包括匹配、搜索、查找和替换文本的实用示例,适合初学者快速入门正则表达式。
推荐工具
Python re 模块:匹配、搜索、查找与替换
1. 什么是 re 模块?
Python 的 re 模块 是处理 正则表达式 的标准库,全称为 "regular expressions"。它可以帮助您在文本中查找、匹配、搜索和替换特定的模式,广泛应用于数据清洗、验证输入、信息提取等场景。正则表达式是一种强大的字符串处理工具,让您可以指定复杂的搜索规则。
为什么学习 re 模块?
- 提高效率:快速处理大量文本数据。
- 灵活性:通过模式匹配,可以处理各种复杂的字符串格式。
- 基础技能:许多编程语言都有类似的正则表达式功能,学习 Python 的 re 模块有助于您掌握通用技能。
2. 基本函数介绍
在使用 re 模块之前,请确保导入它:
import re
以下是 re 模块的四个核心功能及其对应函数:
2.1 re.match():匹配字符串开头
- 作用:从字符串的 开头 匹配一个模式。如果匹配成功,返回一个匹配对象;否则返回 None。
- 适用场景:检查字符串是否以特定模式开头,如验证用户名或 URL。
示例:
import re
# 定义正则表达式模式:以字母开头
pattern = r"^[A-Za-z]+"
string = "Hello123 World"
# 使用 re.match
result = re.match(pattern, string)
if result:
print(f"匹配成功: {result.group()}") # 输出: Hello
else:
print("匹配失败")
解释:模式 r"^[A-Za-z]+" 匹配一个或多个字母,^ 表示字符串开头,r 前缀表示原始字符串,避免转义字符的问题。
2.2 re.search():搜索整个字符串
- 作用:在 整个字符串 中搜索第一个匹配的模式。与 re.match() 不同,它从任何位置开始匹配。
- 适用场景:查找字符串中的特定子串,如提取邮件地址或电话号码。
示例:
import re
# 搜索数字
pattern = r"\d+" # 匹配一个或多个数字
string = "商品编号:12345 价格:99"
result = re.search(pattern, string)
if result:
print(f"找到的数字: {result.group()}") # 输出: 12345
else:
print("未找到匹配")
解释:\d+ 表示一个或多个数字字符;re.search 只返回第一个匹配项。
2.3 re.findall() 和 re.finditer():查找所有匹配
- re.findall():返回一个列表,包含所有匹配的子字符串。
- re.finditer():返回一个迭代器,逐个提供匹配对象,适合处理大型文本。
示例:
import re
# 查找所有数字
pattern = r"\d+"
string = "订单:100, 200, 300"
# 使用 re.findall
matches = re.findall(pattern, string)
print(f"所有数字列表: {matches}") # 输出: ['100', '200', '300']
# 使用 re.finditer
for match in re.finditer(pattern, string):
print(f"匹配位置: {match.start()}-{match.end()}, 内容: {match.group()}")
# 输出多个行,每个匹配的位置和内容
解释:re.findall 直接返回匹配的字符串列表,re.finditer 提供更多控制,如获取匹配位置。
2.4 re.sub():替换匹配的文本
- 作用:替换字符串中所有匹配模式的子串,或指定替换次数。
- 适用场景:数据清洗、格式化文本。
示例:
import re
# 替换所有空格为下划线
pattern = r"\s+" # 匹配一个或多个空白字符
string = "Hello World Python Tutorial"
replacement = "_"
new_string = re.sub(pattern, replacement, string)
print(f"替换后: {new_string}") # 输出: Hello_World_Python_Tutorial
解释:\s+ 匹配空格、制表符等;re.sub 会返回新字符串,原始字符串不变。
3. 常用正则表达式语法简介
为了有效使用 re 模块,了解一些基本正则表达式符号很重要:
.:匹配任意单个字符(除了换行符)。^:匹配字符串开头。$:匹配字符串结尾。*:匹配前面的字符零次或多次。+:匹配前面的字符一次或多次。?:匹配前面的字符零次或一次。[]:字符集,匹配方括号内的任意字符,如[abc]匹配 a、b 或 c。\d:匹配数字,等价于[0-9]。\s:匹配空白字符。
示例:组合使用这些符号。
import re
# 模式:以字母开头,后跟数字
pattern = r"^[A-Za-z]+\d+"
string = "Test123 End"
result = re.match(pattern, string)
if result:
print("匹配成功")
4. 实战示例:验证和提取信息
让我们结合例子,练习常见任务。
验证电子邮件地址
import re
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
email = "user@example.com"
if re.match(pattern, email):
print("有效邮件地址")
else:
print("无效邮件地址")
解释:这个模式检查邮件的基本格式,但实际应用中可能需要更复杂的验证。
提取所有 URL
import re
pattern = r"https?://[\w.-]+(?:\/[\w.-]*)*" # 简化的 URL 模式
text = "访问 https://example.com 和 http://test.org/page"
urls = re.findall(pattern, text)
print(f"找到的 URLs: {urls}") # 输出: ['https://example.com', 'http://test.org/page']
5. 最佳实践与注意事项
- 使用原始字符串:定义模式时,加
r前缀,如r"\d+",以避免反斜杠转义问题。 - 测试模式:先用简单字符串测试,再应用到复杂场景。
- 注意性能:正则表达式可能较慢,在处理大文本时考虑优化。
- 避免过度使用:对于简单字符串操作,优先使用内置方法,如
str.replace()。
6. 总结
通过本教程,您应该已经掌握了 Python re 模块的核心功能:匹配、搜索、查找和替换文本。正则表达式是强大的工具,但需要实践来精通。建议多写代码示例,并查阅 Python 官方文档以深入学习高级特性。
如果您是 Python 新手,可以从本章节的代码开始,逐步尝试修改模式或应用到自己项目中。祝您学习愉快!
扩展阅读:
- 学习更多正则表达式模式:查阅在线资源或书籍。
- 实践项目:尝试构建一个简单的日志分析器或数据清洗脚本。
开发工具推荐