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

Python如何用正则将MM-DD-YYYY日期转换为月份字符串 DD, YYYY格式

问题原因梳理

  1. 月份映射字典方向错误:当前是「月份名→数字」,你的需求是用数字查询月份名,需要调整为「数字→月份名」
  2. str.replace()不支持正则匹配:Python内置字符串替换方法只能做普通文本匹配,正则替换需要使用re模块的re.sub()方法
  3. 正则规则不匹配:你的正则写的是匹配斜杠/分隔的日期,但实际要处理的是横杠-分隔的日期;额外加的/gm是其他语言的正则写法,Python不需要这种后缀
  4. 占位符使用逻辑错误:${1}这类正则占位符只有在替换字符串场景下才会被解析,直接作为字典key只会被识别为普通字符串${1},自然触发KeyError

修正后实现代码

第一步:调整月份映射字典

# 补全所有月份的映射关系即可
month_dictionary = {
    1: "January",
    2: "February",
    3: "March",
    4: "April",
    5: "May",
    6: "June",
    7: "July",
    8: "August",
    9: "September",
    10: "October",
    11: "November",
    12: "December"
}

第二步:完整转换逻辑

建议输出到新文件避免原文件被意外损坏,如果你需要处理指定列,直接修改date_col_index的值即可(列索引从0开始计数):

import csv
import re

def convert_date(match_obj):
    # 从匹配结果中取分组内容
    month_num = int(match_obj.group(1))
    day = match_obj.group(2)
    year = match_obj.group(3)
    # 拼接为要求的日期格式
    return f"{month_dictionary[month_num]} {day}, {year}"

input_path = "你的原CSV文件路径.csv"
output_path = "转换后CSV文件路径.csv"
date_col_index = 2 # 替换为你实际要处理的日期列索引

with open(input_path, newline="", encoding="utf-8") as in_file, \
     open(output_path, "w", newline="", encoding="utf-8") as out_file:
    reader = csv.reader(in_file, delimiter=",", quotechar='"')
    writer = csv.writer(out_file, delimiter=",", quotechar='"')
    for row in reader:
        # 仅处理指定列的日期内容
        row[date_col_index] = re.sub(r"(\d{1,2})-(\d{1,2})-(\d{4})", convert_date, row[date_col_index])
        writer.writerow(row)

逻辑说明

re.sub()支持传入回调函数作为替换规则,每次匹配到目标格式的日期,就会把匹配结果对象传给回调函数,我们从匹配结果里取出月、日、年三个部分,查询到月份全称后拼接成要求的格式返回即可。测试输入05-25-1999会返回May 25, 1999,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 05:57:02