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

如何用正则仅为单个数字的日期、月份补前置0?

解决方案

核心修改点

  1. 将正则中的\d{1,2}改为\d,仅匹配单个数字的日期/月份;
  2. 调整正则结构,将上下文内容和单个数字分别捕获,替换时保留原有上下文,仅对单个数字补前置0;
  3. 移除未定义的变量引用,调整替换顺序避免重复处理。

修正后的代码

import re

# 示例输入,可替换为其他示例
input_text = "Serian 4 unidades de mermelada para el dia 04 del 8 de este año 2023"  # example 1
# input_text = "Hay 10 unidades para el dia 15 del 12 y seran 9 ya para el 7 de noviembre"  # example 2
# input_text = "Hay 10 unidades para el 15 del 1º mes del año y seran alrededor de 9 para el 07º dia del mes de noviembre"  # example 3

# 匹配不带º的日期:捕获上下文 + 单个数字
day_re1 = r"((?:del dia|de el dia|del|de el|el)[\s|]*)(\d)"
# 匹配带º的日期:捕获单个数字 + 后续上下文
day_re2 = r"(\d)([\s|]*º[\s|]*dia)"

# 匹配不带º的月份:捕获上下文 + 单个数字
month_re1 = r"((?:del mes|del|de el)[\s|]*)(\d)"
# 匹配带º的月份:捕获单个数字 + 后续上下文
month_re2 = r"(\d)([\s|]*(?:º[\s|]*mes del año|º[\s|]*mes))"

# 按顺序替换,先处理月份再处理日期(或反之不影响,按需调整)
input_text = re.sub(month_re1, r"\10\2", input_text)
input_text = re.sub(month_re2, r"0\1\2", input_text)
input_text = re.sub(day_re1, r"\10\2", input_text)
input_text = re.sub(day_re2, r"0\1\2", input_text)

print(repr(input_text))

代码说明

  • 每个正则都将上下文和单个数字分为两个捕获组,替换时通过反向引用\1保留上下文,给捕获的单个数字\2添加前置0;
  • 带º的场景中,数字在前、上下文在后,所以替换时用0\1\2给数字补0后保留后续的º mes/º dia内容;
  • 仅匹配单个数字\d,不会对两位数字(如04、15)进行修改,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:50:32