Python re 模块常用接口
标准库 re 提供编译、搜索、整串匹配、替换与切分几类接口。模块级函数与预编译对象功能等价:直接调用 re.search 时内部会先编译并命中缓存,所以不必为「性能」强行预编译;预编译的价值主要在循环外复用与把模式集中管理。编译失败会抛 re.error,属于应该在启动阶段暴露的问题。
基本信息
| 顶层接口 | compile、search、match、fullmatch、findall、finditer、sub、subn、split、escape、purge |
|---|---|
| 通用签名 | 接口参数顺序为模式、待处理字符串、可选标志,sub 还有替换内容与次数 |
| 返回值 | findall 返回字符串或元组列表,finditer 返回匹配对象迭代器,其余返回匹配对象或改写后的字符串 |
| 异常 | 模式非法时抛 re.error,错误信息里带位置与原因 |
典型使用场景
- 文本清洗:批量去掉多余空白、控制字符与固定噪声片段
- 日志解析:逐行用 finditer 或 search 抽取字段,处理大文件时避免一次性读入
- 输入校验:用 fullmatch 判断整串是否符合规则,比加锚点更不容易遗漏
- 模板替换:用 sub 做占位符替换,需要条件判断时传入回调函数
- 分片处理:用 split 按分隔符切分,注意分隔符本身是否要保留
常用接口示例
常用接口示例
import re
pat = re.compile(r'(?P<key>\w+)=(?P<val>[^;]+)') # 循环外编译一次即可复用
m = pat.search('size=10; color=red') # 返回第一个匹配对象或 None
if m: print(m.group('key'), m.group('val')) # 取值前先判空
for mm in pat.finditer(text): ... # 流式遍历,适合大文本
re.sub(r'\s+', ' ', text) # 归一化空白")
re.subn(r'\d+', '#', text) # 返回改写结果与替换次数
re.split(r'[,;]', line) # 按多个分隔符切分
re.escape(user_input) # 把字面量安全嵌进模式接口与返回
| 接口 | 作用 | 返回类型 |
|---|---|---|
| search | 扫描任意位置找第一个匹配 | 匹配对象或 None |
| match | 从串首开始匹配 | 匹配对象或 None |
| fullmatch | 要求整串匹配 | 匹配对象或 None |
| findall | 返回全部匹配的内容 | 列表 |
| finditer | 逐个产出匹配对象 | 迭代器 |
| sub 与 subn | 替换匹配内容 | 字符串,subn 额外返回次数 |
| split | 按模式切分 | 字符串列表 |
模式字符串建议一律使用原始字符串写法:普通字符串里反斜杠序列会被先行解释,形如数字转义的写法在较新版本会给出警告,且容易与预期不符,这一坑在跨文件复制模式时出现频率很高。
re.escape 用于把不可信或含特殊字符的字面量安全嵌入模式,是拼接用户输入的必备步骤;漏掉它会让输入中的元字符改变整条模式的语义。