引言
正则表达式(Regular Expression)是文本处理的“瑞士军刀”,无论是数据清洗、日志分析,还是表单验证,它都能大显身手。但因其语法复杂,许多开发者望而却步。本文结合Python的re
模块,从基础到实战,手把手教你掌握正则表达式,轻松应对90%的文本处理需求!
目录
一、正则表达式核心概念
-
什么是正则表达式?:通过特定规则描述字符串模式的工具,核心功能是匹配和替换文本。
-
三大核心用途:
-
验证格式(如手机号、邮箱)。
-
提取内容(如从日志中提取IP地址)。
-
批量替换(如统一日期格式)。
-
二、正则表达式语法精讲
2.1 字符组:精准匹配范围
-
语法:
[ ]
定义匹配范围,支持简写和组合。 -
示例:
-
[0-9a-fA-F]
:匹配十六进制字符。 -
[^abc]
:匹配非a、b、c的字符。
-
import re
text = "ID: A3B, Hex: 0x1f"
pattern = r"[0-9a-fA-F]+" # 匹配十六进制字符
print(re.findall(pattern, text)) # 输出:['3', '0', '1f']
2.2 元字符:匹配特殊逻辑
-
核心元字符表:
元字符 | 说明 | 等价写法 |
---|---|---|
. | 匹配除换行符外的任意字符 | - |
\d | 匹配数字 | [0-9] |
\w | 匹配字母、数字、下划线 | [a-zA-Z0-9_] |
^ | 匹配字符串开头 | - |
示例:验证手机号格式
phone = "17812345678"
pattern = r"^1[34578]\d{9}$" # 匹配11位手机号
print(re.match(pattern, phone)) # 输出:<re.Match object>
2.3 量词:控制重复次数
-
量词分类:
量词 | 说明 | 贪婪模式 | 惰性模式 |
---|---|---|---|
* | 重复0次或多次 | .* | .*? |
+ | 重复1次或多次 | .+ | .+? |
{n,m} | 重复n到m次 | {3,5} | {3,5}? |
示例:提取HTML标签(惰性匹配)
html = "<div>标题</div><p>正文</p>"
pattern = r"<.*?>" # 匹配所有标签
print(re.findall(pattern, html)) # 输出:['<div>', '</div>', '<p>', '</p>']
2.4 分组与转义:复杂规则处理
-
分组
()
:提取子内容或复用规则。 -
转义
\
:匹配元字符本身(如\.
匹配点号)。
示例:提取日期
date = "2023-10-05"
pattern = r"(\d{4})-(\d{2})-(\d{2})"
match = re.match(pattern, date)
print(match.groups()) # 输出:('2023', '10', '05')
三、Python实战:re模块四大方法
3.1 match()
:从开头匹配
text = "Python 3.10 released"
pattern = r"^Python" # 匹配以Python开头的字符串
print(re.match(pattern, text)) # 输出:<re.Match object>
3.2 search()
:查找首个匹配项
text = "Error: 404 Not Found"
pattern = r"\d+" # 查找第一个数字
print(re.search(pattern, text).group()) # 输出:404
3.3 findall()
:提取所有结果
log = "IP: 192.168.1.1, User: admin"
pattern = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
print(re.findall(pattern, log)) # 输出:['192.168.1.1']
3.4 sub()
:替换字符串
text = "联系:17811112222,邮箱:test@example.com"
pattern = r"1[34578]\d{9}"
print(re.sub(pattern, "***隐私保护***", text)) # 输出:联系:***隐私保护***
四、避坑指南:常见问题与优化
-
贪婪匹配陷阱:
-
错误示例:
r"<.*>"
会匹配整个<div>...</div>
。 -
修正方案:
r"<.*?>"
惰性匹配。
-
-
转义符处理:
-
Python字符串需写为
\\\\
或使用原始字符串r"\\"
。
-
-
性能优化:
-
避免过度使用
.*
,尽量用具体字符组(如\d+
替代.*?
)。
-
五、工具推荐:效率提升神器
-
在线测试:Regex101(实时高亮调试)
-
学习资源:Python re模块文档
-
可视化工具:Regexper(生成正则表达式流程图)
本次总结:
正则表达式是程序员必备技能,掌握后能大幅提升文本处理效率。建议结合文中代码多实践,遇到复杂规则时善用工具调试。如果本文对你有帮助,欢迎点赞收藏,关注博主获取更多Python干货!