Извлечение года из строки в python

#python #regex

#python #регулярное выражение

Вопрос:

Как я могу проанализировать фолл. в Python для извлечения года:

 'years since 1250-01-01 0:0:0'
  

Ответ должен быть 1250

Ответ №1:

Есть всевозможные способы сделать это, вот несколько вариантов:

  • dateutil анализатор в «нечетком» режиме:

     In [1]: s = 'years since 1250-01-01 0:0:0'
    
    In [2]: from dateutil.parser import parse
    
    In [3]: parse(s, fuzzy=True).year  # resulting year would be an integer
    Out[3]: 1250
      
  • регулярные выражения с группой захвата:

     In [2]: import re
    
    In [3]: re.search(r"years since (d{4})", s).group(1)
    Out[3]: '1250'
      
  • разделение на «с тех пор», а затем на тире:

     In [2]: s.split("since", 1)[1].split("-", 1)[0].strip()
    Out[2]: '1250'
      
  • или может быть даже разделение по первому тире и нарезка первой подстроки:

     In [2]: s.split("-", 1)[0][-4:]
    Out[2]: '1250'
      

Последние два включают больше «движущихся частей» и могут быть неприменимы в зависимости от возможных вариантов входной строки.

Комментарии:

1. Не знал о «нечетком». Аккуратно.

2. Аккуратно! Я тоже не знал об этом.

Ответ №2:

Вы можете использовать регулярное выражение с группой захвата вокруг четырех цифр, а также убедиться, что у вас есть определенный шаблон вокруг него. Я бы, вероятно, поискал что-то, что:

  • 4 цифры и запись (d{4})

  • дефис -

  • две цифры d{2}

  • дефис -

  • две цифры d{2}

Предоставление: (d{4})-d{2}-d{2}

ДЕМОНСТРАЦИЯ:

 >>> import re
>>> d = re.findall('(d{4})-d{2}-d{2}', 'years since 1250-01-01 0:0:0')
>>> d
['1250']
>>> d[0]
'1250'
  

если вам это нужно как int, просто приведите его как таковой:

 >>> int(d[0])
1250
  

Комментарии:

1. Вам не нужны s в начале.

Ответ №3:

Следующее регулярное выражение должно сделать четырехзначный год доступным в качестве первой группы захвата:

 ^.*(d{4})-d{2}-d{2}.*$