Регулярные выражения в Python (перевод даты из текстового формата в числовой )

Мне даны 3 варианта дат: 042555 04/25/1955 April 25, 1955

Мне необходимо преобразовать каждый формат в другой ( то есть всего 6 преобразований). Например, для того, чтобы "042555" преобразовать в "04/25/1955" я использовала код:

import re
s = "042555"
re.sub(r'(\d{2})(\d{2})(\d{2})', r'\1/\2/19\3',s)

И он работает. Обратное преобразование тоже получилось.

Но я не понимаю, как преобразовать формат "April 25, 1955" в "04/25/1955" и обратно.

Буду благодарна, если сможете помочь!


Ответы (1 шт):

Автор решения: GrAnd

Используйте lambda для обработки найденных групп и генерации выходной строки.

import re

months = ["January", "February", "March", "April", "May", "June", "July", 
          "August", "September", "October", "November", "December"]

a = "April 25, 1955" 
b_from_a = re.sub(r"(\w+)\s+(\d+),\s*(\d+)", lambda m: f"{months.index(m[1])+1:0>2}/{m[2]}/{m[3]}", a)

b = "04/25/1955"
a_from_b = re.sub(r"(\d+)/(\d+)/(\d+)", lambda m: f"{months[int(m[1])-1]} {m[2]}, {m[3]}", b)
→ Ссылка