Регулярное выражение для даты в Python
У меня есть большой набор данных с комментариями к фин. операциям.
В комментариях иногда пишут дату начисления, в любом удобном формате. Мне нужно ее считывать независимо от формата.
Допустим есть коммент:
"Дата начисления 21.04.2022"
Отсюда мне надо вытащить только "21.04.2022" и преобразовать в единый формат 2022-04-21
Или, например:
"Дата начисления: 21/04/2022"
Задача та же, независимо от разделителей.
В AppsScript делал это регулярным выражением
/\d{2}(\D)\d{2}\1\d{4}/g
через String.match(), попробовал через re.match через то же выражение прокрутить строку, но это не работает почему-то.
Подскажите, что можно сделать. Возможно, есть более простой способ в питоне это реализовать
Так это было в AppsScript
acc_date = d.comment.toString().match(/\d{2}(\D)\d{2}\1\d{4}/g);
Так в Питоне
accDate = re.match("/\d{2}(\D)\d{2}\1\d{4}/g", str(transcation['comment']), flags=0)
Ответы (5 шт):
- Разделяем split() на части;
- Метод datetime.strptime() анализирует входную строку с заданным форматом datetime и возвращает объект datetime.
import datetime
s = "Дата начисления 21.04.2022"
lst = s.split()
print(lst[2])
date_time_obj = datetime.datetime.strptime(lst[2], "%d.%m.%Y")
print('Дата:', date_time_obj.date())
ВЫВОД: 21.04.2022 Дата: 2022-04-21
import re
data = '12/12/04'
search_sumbol = '[.,/]'
print(re.sub(search_sumbol, '-', data))
Попробуйте начать с чего-то такого:
import re
a = "Дата начисления: 21/04/2022"
res = re.sub(r"[/\\.]", "-", re.search(r"(\d+.*?\d+.*?\d+)", a).group(1))
print(res)
21-04-2022
Пользовал одно время вот эту штуку.
Пример использования
import datefinder
a = datefinder.find_dates('"Дата начисления 21.04.2022". Отсюда мне надо вытащить только "21/04/2022"')
b = list(a)
print(b)
# OUT
# [datetime.datetime(2022, 4, 21, 0, 0), datetime.datetime(2022, 4, 21, 0, 0)]
print(b[0].date().isoformat())
# OUT
# '2022-04-21'
import re
a = "Дата начисления 21.04.2022 Дата начисления 21/04/2021"
date = [ f'{i[2]}-{i[1]}-{i[0]}' for i in [x.replace(".", "/").split('/') for x in re.findall(r'\d{2}.\d{2}.\d{4}', a)]]
print(date)
Если разложить
import re
a = "Дата начисления 21.04.2022 Дата начисления 21/04/2021"
# Находим все даты в строке
date = re.findall(r'\d{2}.\d{2}.\d{4}', a)
date_list = []
for i in date:
# Разделяем дату по . или /
i = i.split('.') if '.' in i else i.split('/')
date_list.append(f'{i[2]}-{i[1]}-{i[0]}')
print(date_list)