Подтвердить что ты не робот

Извлечение даты из строки в Python

Как я могу извлечь дату из строки, например, "monkey 2010-07-10 love banana"? Спасибо!

4b9b3361

Ответ 1

Если дата указана в фиксированной форме, вы можете просто использовать регулярное выражение для извлечения даты и "datetime.datetime.strptime" для анализа даты:

match = re.search(r'\d{4}-\d{2}-\d{2}', text)
date = datetime.strptime(match.group(), '%Y-%m-%d').date()

В противном случае, если дата дана в произвольной форме, вы не можете ее легко извлечь.

Ответ 2

Использование python-dateutil:

In [1]: import dateutil.parser as dparser

In [18]: dparser.parse("monkey 2010-07-10 love banana",fuzzy=True)
Out[18]: datetime.datetime(2010, 7, 10, 0, 0)

Недействительные даты повышают значение ValueError:

In [19]: dparser.parse("monkey 2010-07-32 love banana",fuzzy=True)
# ValueError: day is out of range for month

Он может распознавать даты во многих форматах:

In [20]: dparser.parse("monkey 20/01/1980 love banana",fuzzy=True)
Out[20]: datetime.datetime(1980, 1, 20, 0, 0)

Обратите внимание, что это делает предположение, если дата неоднозначна:

In [23]: dparser.parse("monkey 10/01/1980 love banana",fuzzy=True)
Out[23]: datetime.datetime(1980, 10, 1, 0, 0)

Но способ обработки двусмысленных дат настраивается:

In [21]: dparser.parse("monkey 10/01/1980 love banana",fuzzy=True, dayfirst=True)
Out[21]: datetime.datetime(1980, 1, 10, 0, 0)

Ответ 3

Для извлечения даты из строки в Python; лучшим доступным модулем является модуль datefinder.

Вы можете использовать его в своем проекте Python, выполнив следующие простые шаги.

Шаг 1: Установите пакет датирования

pip install datefinder

Шаг 2: используйте его в своем проекте

import datefinder

input_string = "monkey 2010-07-10 love banana"
# a generator will be returned by the datefinder module. I'm typecasting it to a list. Please read the note of caution provided at the bottom.
matches = list(datefinder.find_dates(input_string))

if len(matches) > 0:
    # date returned will be a datetime.datetime object. here we are only using the first match.
    date = matches[0]
    print date
else:
    print 'No dates found'

примечание:, если вы ожидаете большого количества совпадений; то приведение типов в список не будет рекомендуемым способом, так как оно будет иметь большие накладные расходы.