#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}.*$