如何用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
相关产品推荐
相关产品推荐

