2017-01-06 2 views
1

У меня есть строка, как это:Python: Извлечение даты из строки и поместить в список

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() 

Этот процесс работает отлично, но я хочу делать только в одной операции, а не делать в два этапа (расщепление и согласование)

Note:-I want to create a list of dates from the string present between ":" and "space" in the string. I don't want the date present with "_ActNacd_" string. 

Так я создам список, который будет содержать даты:

['2016-12-21','2016-12-21', '2016-12-21', '2016-12-21'] 
+0

Вы можете написать регулярное выражение для соответствия только датам между " : "и" пространство "без разделения. – gzc

ответ

1

С re.findall(), вы можете добиться того, что, как показано ниже:

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'] 
+0

Я думаю, что он будет иметь повторяющиеся записи для каждой даты, так как каждая дата представлена ​​дважды в строке для строки. –

0

Попытайтесь сначала разбить на \ n, затем вы можете перебирать по строке и с помощью обратной подстроки получать дату и с помощью функции .append() получить желаемый список