1. 正则表达式基础与re模块概览
正则表达式作为文本处理的瑞士军刀,在数据清洗、日志分析、表单验证等场景中不可或缺。Python内置的re模块提供了完整的正则表达式实现,相比字符串原生方法,它能处理更复杂的模式匹配需求。我处理过的一个电商评论分析项目中,正则表达式帮助我们从非结构化的用户反馈中快速提取产品型号、评分关键信息,效率提升近10倍。
正则表达式引擎采用回溯算法进行模式匹配,其核心是通过元字符(metacharacters)构建匹配规则。这些特殊字符包括:
- 定位符:^(行首)、$(行尾)
- 字符类:[](字符集合)、[^](否定字符集)
- 量词:*(0次或多次)、+(1次或多次)、?(0或1次)
- 其他特殊字符:.(任意字符)、|(或运算)、()(分组)
重要提示:在Python中正则模式字符串最好使用原始字符串(raw string)写法,即r'pattern'形式。这样可以避免Python解释器对反斜杠进行转义处理,确保正则引擎接收到的是原始模式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. re模块核心方法详解
2.1 匹配检测方法对比
re.match()和re.search()是最常用的两个匹配函数,但新手容易混淆它们的区别:
- match()必须从字符串起始位置开始匹配,相当于隐式包含^锚点
- search()会扫描整个字符串寻找第一个匹配位置
- 两者都只返回第一个匹配结果
python复制import re
text = "订单编号:A10086 金额:¥299"
# match无法匹配中间内容
print(re.match(r'金额:¥(\d+)', text)) # None
# search可以匹配任意位置
print(re.search(r'金额:¥(\d+)', text).group(1)) # 299
2.2 全量匹配与结果提取
当需要获取所有匹配项时,re.findall()和re.finditer()各有用武之地:
- findall()直接返回匹配字符串列表,对于简单提取非常高效
- finditer()返回匹配对象迭代器,适合需要获取位置信息的场景
python复制log = "[ERROR] 2023-08-20: 磁盘空间不足; [WARN] 2023-08-2
