2015-04-02 2 views
2

У меня есть строка даты, какнужно Regex шаблона для этой даты

Date: April 1st, 2015 
    Date: March 31st, 2015 
    Date: March 26th, 2015 

Мне нужно, чтобы извлечь эту дату, которая подходит для питона даты и время шаблона. сделаю '%B %d %Y' как шаблон времени python.

Итак, как я могу извлечь строку выше в формат даты и времени. Regex вывод должен быть:

March 31 2015 
August 1 2014 

Пожалуйста, помогите мне построить хороший шаблон регулярного выражения.

+0

https://regex101.com/r/eX8bR6/1 что-то вроде этого - вы можете использовать группы захвата – sinisake

ответ

0

Как я хотел бы сделать это:

date = 'Date: April 1st, 2015' 
import re 
regex = re.search(
    r'Date:\s([A-Z]{1}[a-z]*)\s([0-9]{1,2})[a-z]{2},\s([0-9]{4})', 
    date, 
) 
parsed_date = ' '.join(regex.groups()) 
from datetime import datetime 
date_time = datetime.strptime(parsed_date, '%B %d %Y') 

print date_time 
#output 
'2015-04-01 00:00:00' 

теперь просто положить это в крови у вас и сделать что-то с даты ;-)

1
^.*?:\s*|[a-zA-Z]+, 

Вы можете использовать re.sub для этого и заменить empty string .Увидь демо.

https://regex101.com/r/sJ9gM7/42#python

import re 
p = re.compile(r'^.*?:\s*|[a-zA-Z]+,', re.MULTILINE | re.IGNORECASE) 
test_str = " Date: April 1st, 2015\n Date: March 31st, 2015\n Date: March 26th, 2015" 
subst = "" 

result = re.sub(p, subst, test_str) 
0

Вы можете использовать datetime.datetime.strptime и strftime:

>>> d=datetime.datetime.strptime('April 1 2015','%B %d %Y') 
datetime.datetime(2015, 4, 1, 0, 0) 

>>> d.strftime('%B %d %Y') 
'April 01 2015' 
1

Попробуйте что-то вроде этого:

Date:\s*(\w+)\s*(\d+)\w+,\s*(\d+) 

Это поместит каждый элемент даты в последующих захвачена параметры (1, 2, 3), доступные через xg синтаксис roup (n).

>>> ' '.join(re.match(r'Date:\s*(\w+)\s*(\d+)\w+,\s*(\d+)', 'Date: April 1st, 2015').groups()) 
'April 1 2015' 
Смежные вопросы