Python正则替换技巧:sub与subn区别详解
re.sub()返回替换后的字符串,re.subn()返回(新字符串,替换次数)元组;前者适合只需结果的场景,后者适用于需统计或校验替换数量的情况。
re.sub()返回替换后的字符串,re.subn()返回(新字符串, 替换次数)元组;前者适合只需结果的场景,后者适用于需统计或校验替换数量的情况。

Python正则替换中,re.sub() 和 re.subn() 都用于替换匹配内容,但返回结果不同:前者只返回替换后的字符串,后者额外返回替换次数。
re.sub():专注结果,简洁直接
它执行替换后,只返回处理完成的字符串,适合你只关心“最终文本长什么样”的场景。
- 语法:
re.sub(pattern, repl, string, count=0, flags=0) count参数可限制最多替换几次(默认全部)- 若没匹配,原字符串直接返回,不报错
例如:
import re
text = "价格:100元,折扣价:85元"
result = re.sub(r"\d+元", "XX元", text)
print(result) # 输出:价格:XX元,折扣价:XX元
re.subn():带计数的替换,适合调试或统计
它返回一个二元组 (new_string, number_of_subs),第二个值是实际发生的替换次数。
- 语法与
sub完全一致,只是返回值多一个数字 - 当你需要确认是否真的替换了、替换了几次,或者做条件判断时很实用
- 比如日志清洗中,想跳过“未改动”的行,就可以用这个计数过滤
例如:
import re
text = "abc123def456ghi"
new_text, n = re.subn(r"\d+", "[NUM]", text)
print(new_text) # abc[NUM]def[NUM]ghi
print(n) # 2
什么时候该选哪个?
看你的后续动作:
- 只要新文本 → 用
sub,代码更干净 - 要检查替换是否发生、或需记录/校验替换数量 → 用
subn - 批量处理大量文本且需监控替换率(如 95% 的地址都成功标准化)→
subn更易汇总统计
小提醒:别忽略 count 和 flags
两个函数都支持 count(限制替换次数)和 flags(如 re.I 忽略大小写),这些参数对二者完全通用。
count=1可实现“只换第一个”,避免误改flags=re.IGNORECASE在替换关键词时不区分大小写- 如果正则含捕获组,
repl中可用\1、\2引用,两者都支持
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















