Просто добавьте метку времени 1 , полученную к регулярному выражению, которое вы в любом случае используете.
Для этого используйте "Группы захвата" .
Чтобы получить числа в формате HH:MM:SS
, у вас есть две цифры, двоеточие, две цифры, еще двоеточие и еще две цифры.Определить, что это трудно , так что вы, вероятно, просто напишите это точно так:
(\d\d):(\d\d):(\d\d)
(если хотите, вы можете {2}
эти \d
, но для меняэто кажется более сложным).
Обратите внимание на круглые скобки вокруг сопоставителей цифр: они говорят re
захватить содержимое отдельно для вас и сделать его доступным как match.group(number)
, начиная с 1 и match.groups()
, aкортеж.Чтобы быть уверенным в совпадении с end строки (не в середине), вы добавляете $
(строго, это не должно быть обязательно, так как .*
id "жадный", но это более понятно).
Если вы добавите это к своему регулярному выражению (удалив группы, которые у вас уже есть, если они вам не нужны; учитывайте их в противном случае), вы получите:
pattern = re.compile(r'.* for exports .* (\d\d):(\d\d):(\d\d)$')
Теперь вы можете сопоставить это и получить время для каждого прогона следующим образом: match = pattern.match(logline); seconds = (int(match.group(1))*60 + int(match.group(2))) * 60 + int(match.group(3)
Как я уже говорил выше, количественное определение сложно, но оно может бытьГотово, я знаю о двухэтапном подходе: сначала вы получаете все метку времени, а затем обрабатываете ее отдельно.В этом случае добавленное усложнение слишком велико, но, если у вас есть что-то другое, было бы хорошо иметь в виду:
.*((?:\d{2}:)+\d\d)$
фиксирует любую длину двух цифр, разделенных двоеточиями, вы можетезатем просто .split(':')
это и выполните ваши вычисления.
1 это обычно относится к конкретному моменту времени , а не к продолжительности.Чтобы не смущать вас, я использовал «метку времени» в своем ответе.Фактическая отметка времени в выходных данных журнала 2019-01-30 08:34:46.463
, а не 00:26:15
.