簡體   English   中英

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

[英]Extract different format date from a string in Python

我有幾個字符串,並且已經確定了它們上日期的某些格式,並且想識別每個字符串上的日期

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)

如何應用幾個正則表達式以便可以識別日期?

如果刪除下划線:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM