Python 教程

17.2 re 模块:匹配、搜索、查找与替换

Python re Module 入门教程:掌握匹配、搜索、查找与替换

Python 教程

这篇Python学习教程详细介绍了re模块的用法,包括匹配、搜索、查找和替换文本的实用示例,适合初学者快速入门正则表达式。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

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 新手,可以从本章节的代码开始,逐步尝试修改模式或应用到自己项目中。祝您学习愉快!


扩展阅读

  • 学习更多正则表达式模式:查阅在线资源或书籍。
  • 实践项目:尝试构建一个简单的日志分析器或数据清洗脚本。
开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包