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

如何用Python将字符串中DD-MMM-YY格式日期转为YY-MM-DD?

识别并转换字符串中的DD-MMM-YY格式日期

需求

  • 使用Python识别字符串任意位置的DD-MMM-YY格式日期
  • 将识别出的日期转换为YY-MM-DD格式
  • 支持批量处理字符串中的多个该格式日期

当前问题

自行编写的逻辑存在判断错误(如条件颠倒导致进入错误分支),实现方法繁琐,且未完成完整转换逻辑,需要更优解决方案。

错误代码及输出

cellvalue = 'AADFDMNB12144.V**12-JAN-23**FFFFFSW-SWS.XCX**15-FEB-22**JHJH1111LOP**4-JAN-22**KKKKKK'
count=int(cellvalue.count('-'))
print('连词符数量...',count)
jancounter=0
febcounter=0
if count > 0:
    print('没有日期')
else:
    for x in range (0,count):
        if '-JAN' in cellvalue:
            jancounter = jancounter + 1
        if '-FEB-' in cellvalue:
            febcounter = febcounter + 1
        # 此处省略其他月份的判断代码

print(jancounter)
print(febcounter)

输出:

连词符数量...7
没有日期

更优解决方案

使用正则表达式批量匹配所有符合格式的日期,结合datetime模块进行格式转换,一步完成识别与替换:

import re
from datetime import datetime

def convert_dates(text):
    # 正则表达式匹配DD-MMM-YY格式,支持月份缩写大小写
    pattern = r'(\d{1,2})-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-(\d{2})'
    
    def replace_match(match):
        day, month, year = match.groups()
        # 解析原日期格式
        original_date = datetime.strptime(f"{day}-{month}-{year}", "%d-%b-%y")
        # 转换为YY-MM-DD格式
        return original_date.strftime("%y-%m-%d")
    
    # 批量替换所有匹配到的日期
    return re.sub(pattern, replace_match, text, flags=re.IGNORECASE)

# 测试示例
cellvalue = 'AADFDMNB12144.V**12-JAN-23**FFFFFSW-SWS.XCX**15-FEB-22**JHJH1111LOP**4-JAN-22**KKKKKK'
result = convert_dates(cellvalue)
print(result)

代码说明

  • 正则表达式r'(\d{1,2})-(JAN|FEB|...|DEC)-(\d{2})':精准匹配1-2位数字的日、三位英文月份缩写、两位数字的年,re.IGNORECASE参数兼容月份缩写的大小写(如jan或Jan)
  • replace_match函数:对每个匹配结果,先用datetime.strptime解析原日期格式,再用strftime转换为目标格式
  • re.sub:一次性完成字符串中所有符合格式日期的替换,无需逐个判断月份,简洁高效

输出结果

AADFDMNB12144.V**23-01-12**FFFFFSW-SWS.XCX**22-02-15**JHJH1111LOP**22-01-04**KKKKKK

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:35:16