Python自学22 - 正则表达式的应用
在 Python 自学之旅中,正则表达式是处理字符串的 “瑞士军刀”。经过前面章节对正则表达式基础语法的学习,本节课我们将聚焦其在 Python 中的实际应用,通过re模块的核心函数,解决字符串匹配、提取、替换等常见问题,让你真正将正则表达式运用到项目开发中。
在进入应用前,先快速回顾正则表达式的核心要素(避免遗忘基础):
-
元字符:.(匹配任意字符)、^(开头匹配)、$(结尾匹配)、[](字符集)、\(转义)等;
-
量词:*(0次及以上)、+(1次及以上)、?(0次或1次)、{n,m}(n到m次);
-
特殊序列:\d(数字)、\w(字母/数字/下划线)、\s(空白字符)等。
正则表达式的核心价值是 “用简洁的语法描述复杂的字符串规则”,而 Python 的re模块则是实现这一价值的工具。
一、为什么要学正则表达式?
在文本处理、数据清洗、日志分析、爬虫开发等场景中,我们经常需要从一大段文字中提取特定信息。
例如:
- 提取邮箱地址
- 验证手机号格式
- 从日志中抓取 IP
- 批量替换字符串
如果用普通字符串方法(split
、find
、replace
),代码会很冗长。
而 正则表达式(Regular Expression, regex) 提供了一种强大而简洁的方式来匹配和操作文本。
二、Python 中的正则模块
Python 内置了 re
模块,常用方法如下:
方法 | 作用 |
---|---|
re.match(pattern, string) | 从字符串开头匹配 |
re.search(pattern, string) | 扫描整个字符串,返回第一个匹配 |
re.findall(pattern, string) | 返回所有匹配结果(列表) |
re.finditer(pattern, string) | 返回迭代器,逐个匹配 |
re.sub(pattern, repl, string) | 替换匹配内容 |
re.split(pattern, string) | 按匹配规则分割字符串 |
re.compile(pattern) | 预编译正则,提高复用效率 |
三、常见正则表达式语法
.
:匹配任意字符(除换行符)\d
:匹配数字,相当于[0-9]
\w
:匹配字母、数字、下划线\s
:匹配空白字符(空格、制表符等)^
:匹配字符串开头$
:匹配字符串结尾*
:重复 0 次或多次+
:重复 1 次或多次?
:重复 0 次或 1 次{m,n}
:重复 m 到 n 次[]
:字符集,例如[abc]
匹配 a/b/c|
:或逻辑,例如cat|dog
匹配 cat 或 dog()
:分组,提取子串
四、实战案例
1. 匹配邮箱
import re
text = "请联系我:test_user123@example.com"
pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,}"
result = re.search(pattern, text)
if result:
print("找到邮箱:", result.group())
输出:
找到邮箱: test_user123@example.com
2. 验证手机号(中国大陆)
pattern = r"^1[3-9]\d{9}$"
print(bool(re.match(pattern, "13812345678"))) # True
print(bool(re.match(pattern, "123456"))) # False
3. 提取日志中的 IP
log = "2025-09-30 10:23:45 - INFO - Client IP: 192.168.1.101 connected"
pattern = r"\b\d{1,3}(?:\.\d{1,3}){3}\b"
ip = re.search(pattern, log)
print("IP 地址:", ip.group())
4. 文本替换
text = "今天的价格是100元,明天的价格是200元"
pattern = r"\d+"
new_text = re.sub(pattern, "XXX", text)
print(new_text)
输出:
今天的价格是XXX元,明天的价格是XXX元
五、技巧与建议
- 调试正则:推荐使用 regex101.com 在线测试。
- 分组提取:用
()
提取子串,结合group()
使用。 - 预编译:在循环中使用
re.compile()
提高性能。 - 避免过度复杂:正则强大,但可读性差,能用简单方法时不要滥用。
六、总结
- 正则表达式是文本处理的利器,掌握后能极大提升效率。
- Python 的
re
模块提供了完整的正则支持。 - 常见应用包括:匹配、提取、验证、替换、分割。
- 建议结合实际项目练习,比如:日志分析、爬虫数据清洗、表单验证。