从Python中的字符串中提取不同的格式日期

时间:2015-05-16 17:04:04

标签: python regex

我有几个字符串,并且已经确定了一些日期格式,并希望识别每个字符串上的日期

an_2011_02_12_azar.mp3 ->this is yyyy_mm_dd
20121112_Marcel.mp3    ->this is yyyymmdd
cdani_270607.mp3       ->this is ddmmyy
lica_07_03_15.mp3      ->this is dd_mm_yy

这样做我有:

foo = """
an_2011_02_12_azar.mp3
20121112_Marcel.mp3   
cdani_270607.mp3     
lica_07_03_15.mp3  
"""
try:
    lines = foo.split('\n')
except AttributeError:
    lines = x
for line in lines:
     print(line)
     #deals with 2011_02_12 format
     match = re.search(r'\d{4}_\d{2}_\d{2}', line)
     date = datetime.datetime.strptime(match.group(), '%Y_%m_%d').date()
     print(date)

如何应用多个正则表达式以便识别日期?

1 个答案:

答案 0 :(得分:1)

如果删除下划线:

datestr = line.replace('_', '')

然后只能处理两种日期格式:yyyymmddddmmyy。 此外,每个日期字符串将包含6到8位数字 找到使用正则表达式模式r'\d{8}|\d{6}'

datestr = re.search(r'\d{8}|\d{6}', datestr).group()

然后可以使用

解析datestr
date = DT.datetime.strptime(datestr, '%d%m%y')

date = DT.datetime.strptime(datestr, '%Y%m%d')

模式r'\d{8}|\d{6}'还会捕获一些可能非类似日期的字符串,这些数字代表无效日期。我们可以使用try..except来抓住ValueErrors来处理这些情况。

import re
import datetime as DT

foo = """\
an_2011_02_12_azar.mp3
20121112_Marcel.mp3   
cdani_270607.mp3     
lica_07_03_15.mp3  
an_2011_13_12_azar.mp3
"""

for line in foo.splitlines():
    datestr = line.replace('_', '')
    datestr = re.search(r'\d{8}|\d{6}', datestr).group()
    try:
        # %y matches 2-digit years
        date = DT.datetime.strptime(datestr, '%d%m%y')
    except ValueError:
        try:
            # %Y matches 4-digit years
            date = DT.datetime.strptime(datestr, '%Y%m%d')
        except ValueError:
            # handle the error case
            date = None
    print('{:23} --> {}'.format(line, date))

产量

an_2011_02_12_azar.mp3  --> 2011-02-12 00:00:00
20121112_Marcel.mp3     --> 2012-11-12 00:00:00
cdani_270607.mp3        --> 2007-06-27 00:00:00
lica_07_03_15.mp3       --> 2015-03-07 00:00:00
an_2011_13_12_azar.mp3  --> None