Skip to main content
 首页 » 编程设计

python之在 re.sub 中使用变量,用于 Python 解析多个日期时间格式的字符串

2025年05月04日20daizhj

我正在尝试想出一个函数来将各种人类日期/时间格式字符串转换为 Python 兼容字符串(从 '*yyyy-MMM-dd*' 到 ' *%Y-%b-%d*').

到目前为止,我在下面构建了翻译字典(元组列表 [('yyyy','%Y'),('MMM','%b'),...] ) 因此我可以将输入格式字符串中的占位符字段转换为 strptime '%x' 字段,例如:

'yyyy-MMM-dd' --> '{5}-{3}-{12}' 

但是接下来我该怎么办?我尝试了多种方法:

>>> re.sub('({\d+})',translateList['\1'][1],'{5}-{3}-{12}') 
TypeError: list indices must be integers, not str 
 
>>> re.sub('({\d+})',translateList[int('\1')][1],'{5}-{3}-{12}') 
ValueError: invalid literal for int() with base 10: '\x01' 
 
>>> re.sub('({\d+})',translateList[eval('\1')][1],'{5}-{3}-{12}') 
SyntaxError: unexpected EOF while parsing 

如何将匹配的内容传递到列表中?或者任何其他方式来做到这一点?

编辑:我目前的做法是这样的,不完全满意:

def _getDatetimeFormatStringFromMuggleString(input): 
    muggleList = [ 
        ('yyyy','%Y'), ('yy','%Y'),                             # year 
        ('MMMM','%B'), ('MMM','%b'), ('MM','%m'), ('M','%m'),   # Month 
        ('dddd','%A'), ('ddd','%a'), ('dd','%d'), ('d','%d'),   # day 
        ('HH','%H'), ('H','%H'), ('hh','%I'), ('h','%I'),       # hour 
        ('mm','%M'), ('m','%M'),                                # minute 
        ('ss','%S'), ('s','%S'),                                # second 
        ('tt','%p'), ('t','%p'),                                # AM/PM 
    ] 
 
    for i in muggleList: 
        if i[0] in input and '%'+i[0] not in input: 
            input = input.replace(i[0], i[1]) 
 
    return input 

请您参考如下方法:

当你可以使用 dateutil.parser 时,为什么要自己推出?

import dateutil 
outdate = dateutil.parser.parse(instr, yearfirst=True)