You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python 3 re.sub转换日期格式时返回不可打印字符的问题

解决Python re.sub中捕获组与数字拼接的问题

你遇到的问题是Python的re.sub对反向引用的解析逻辑导致的:当你写\120时,Python会把\12当成一个整体,试图引用第12个捕获组(但你的正则只有2个捕获组,所以这里会被解析成ASCII控制字符,也就是你看到的不可打印字符),而不是你预期的\1(第一个捕获组)加上20。

解决方法1:使用显式组引用语法\g<n>

修改替换字符串,用\g<1>明确指定第一个捕获组,这样后面的20就不会被误解析为组号的一部分:

import re
date = "25/11/20"
fixed_date = re.sub(r"(\d\d/\d\d/)(\d\d)", r"\g<1>20\2", date)
print(fixed_date)  # 输出: 25/11/2020

解决方法2:拆分匹配与拼接逻辑

也可以先匹配出各部分,再用字符串格式化拼接,这种方式更直观:

import re
date = "25/11/20"
match_result = re.match(r"(\d\d/\d\d/)(\d\d)", date)
if match_result:
    fixed_date = f"{match_result.group(1)}20{match_result.group(2)}"
print(fixed_date)  # 输出: 25/11/2020

补充:regex101的解析逻辑和Python不同,它会优先识别\1为组引用,后续的20被当作普通文本处理,所以在那里能正常工作,但Python的re模块会尽可能匹配最长的数字作为组号,才导致了这个差异。

内容的提问来源于stack exchange,提问作者term_medical

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:50:29