Python:从字符串中提取日期并放入列表

Python:从字符串中提取日期并放入列表,python,string,datetime,split,Python,String,Datetime,Split,我有这样一个字符串: old_ActNacd_2016-12-21_07-09-08.txt:100:2016-12-21 07:08:20 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s old_ActNacd_2016-12-21_08-21-04.txt:52:2016-12-21 07:21:42 - [HSM ]Handle Identity Request. Send Id

我有这样一个字符串:

   old_ActNacd_2016-12-21_07-09-08.txt:100:2016-12-21 07:08:20 - [HSM   ]Handle Identity Request. Send Identity Response. timeout: 1550s
   old_ActNacd_2016-12-21_08-21-04.txt:52:2016-12-21 07:21:42 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s
   old_ActNacd_2016-12-21_08-37-50.txt:49:2016-12-21 08:23:34 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s
   old_ActNacd_2016-12-21_15-00-47.txt:49:2016-12-21 08:39:16 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s
  #creating list after taking the string out
  log_list = ostring.split('Handle Identity Request. Send Identity Response. timeout: 1550s')
    for itr in log_list:
        #getting the dates from the log_list
        match = re.search(r'\d{4}-\d{2}-\d{2}', itr)
        if match:
            date = datetime.strptime(match.group(), '%Y-%m-%d').date()
我试着这样做:

   old_ActNacd_2016-12-21_07-09-08.txt:100:2016-12-21 07:08:20 - [HSM   ]Handle Identity Request. Send Identity Response. timeout: 1550s
   old_ActNacd_2016-12-21_08-21-04.txt:52:2016-12-21 07:21:42 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s
   old_ActNacd_2016-12-21_08-37-50.txt:49:2016-12-21 08:23:34 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s
   old_ActNacd_2016-12-21_15-00-47.txt:49:2016-12-21 08:39:16 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s
  #creating list after taking the string out
  log_list = ostring.split('Handle Identity Request. Send Identity Response. timeout: 1550s')
    for itr in log_list:
        #getting the dates from the log_list
        match = re.search(r'\d{4}-\d{2}-\d{2}', itr)
        if match:
            date = datetime.strptime(match.group(), '%Y-%m-%d').date()
这个过程很好,但我只想在一个操作中完成,而不是分两个步骤(拆分和匹配)

因此,我将创建一个包含日期的列表:

['2016-12-21','2016-12-21', '2016-12-21', '2016-12-21']
使用,您可以实现以下目标:

re.findall(r'(\d{4}\-\d{2}\-\d{2})', s)
如果每行中只需要第二个日期,请尝试:

re.findall(r':(\d{4}\-\d{2}\-\d{2})', s)
输出:

>>> import re
>>> 
>>> s = '''old_ActNacd_2016-12-21_07-09-08.txt:100:2016-12-21 07:08:20 - [HSM   ]Handle Identity Request. Send Identity Response. timeout: 1550s
... old_ActNacd_2016-12-21_08-21-04.txt:52:2016-12-21 07:21:42 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s'''
>>>
>>> re.findall(r':(\d{4}\-\d{2}\-\d{2})', s)
['2016-12-21', '2016-12-21']

首先尝试按\n拆分,然后您可以按行迭代,并使用反向子字符串获取日期,使用.append()函数获取所需列表

您可以编写正则表达式,只匹配“:”和“空格”之间的日期,而不进行拆分。我想每个日期都有重复的条目,因为每个日期在字符串的一行中表示两次。