Поиск и замена строки со временем в формате с секундами и без
Передо мной стоит следующая задача:
Вовочка подготовил одно очень важное письмо, но везде указал неправильное время. Поэтому нужно заменить все вхождения времени на строку (TBD). Время — это строка вида HH:MM:SS или HH:MM, в которой HH — число от 00 до 23, а MM и SS — число от 00 до 59.
Ввод: Уважаемые! Если вы к 09:00 не вернёте чемодан, то уже в 09:00:01 я за себя не отвечаю. PS. С отношением 25:50 всё нормально!
Вывод: Уважаемые! Если вы к (TBD) не вернёте чемодан, то уже в (TBD) я за себя не отвечаю. PS. С отношением 25:50 всё нормально!
Я решаю ее следующим образом:
import re
newStr = 'Уважаемые! Если вы к 09:00 не вернете чемодан.\n\
То уже в 09:00:01 я за себя не отвечаю!\n\
PS Со времнем 25:50 все нормально.'
print(newStr)
s = re.findall(\
'(?:[01]\d|2[0123]):(?:[012345]\d):(?:[012345]\d)'
,newStr)
print(s)
Как правильно построить регулярное выражение, чтобы оно захватывало, либо HH:MM:SS, либо HH:MM, а не только HH:MM:SS?
Ответы (1 шт):
In [269]: pat = r'((?:[01]\d|2[0-3])\:(?:[0-5]\d)(?:\:[0-5]\d)?)'
In [270]: res = re.sub(pat, "(TBD)", newStr)
In [271]: print(res)
Уважаемые! Если вы к (TBD) не вернете чемодан.
То уже в (TBD) я за себя не отвечаю!
PS Со времнем 25:50 все нормально.
In [272]: re.findall(pat, newStr)
Out[272]: ['09:00', '09:00:01']