Python如何用正则将MM-DD-YYYY日期转换为月份字符串 DD, YYYY格式
问题原因梳理
- 月份映射字典方向错误:当前是「月份名→数字」,你的需求是用数字查询月份名,需要调整为「数字→月份名」
str.replace()不支持正则匹配:Python内置字符串替换方法只能做普通文本匹配,正则替换需要使用re模块的re.sub()方法- 正则规则不匹配:你的正则写的是匹配斜杠
/分隔的日期,但实际要处理的是横杠-分隔的日期;额外加的/gm是其他语言的正则写法,Python不需要这种后缀 - 占位符使用逻辑错误:
${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
相关产品推荐
相关产品推荐

