Использование регулярных выражений в Python для извлечения времени из текста электронной почты

#python

Вопрос:

У меня есть содержимое электронной почты. Из этого содержимого я затем хочу извлечь все существующие времена. Время указано в 24-часовом формате, содержит разделитель двоеточий (например, 13:00) и может отображаться в любом месте текста.

В качестве примера:

 "Some text some text some text 12:00 Some text some text some text"
 

Когда я использую эту строку для извлечения времени, результат остается пустым:

 tp_time = re.findall(r'(^[0-2][0-3]:[0-5][0-9]$)', tp_msg)
print(tp_time)
 

Может ли кто-нибудь увидеть, что я делаю не так?

Комментарии:

1. Время «указано в 24-часовом формате», но [0-2][0-3]:[0-5][0-9] не будет совпадать, например 17:00 . Что происходит?

2. Следовало бы использовать (2[0-3]|[0-1][0-9]):[0-5][0-9] вместо этого.

Ответ №1:

Может ли кто-нибудь увидеть, что я делаю не так?

Вы ищете r'(^[0-2][0-3]:[0-5][0-9]$)'

^ обозначает начало строки или начало строки (в зависимости от режима)

$ обозначает конец строки или конец строки (в зависимости от режима)

Вы должны использовать b вместо ^ и b вместо $ , т. е.

 import re
text = "Some text some text some text 12:00 Some text some text some text"
print(re.findall(r'(b[0-2][0-3]:[0-5][0-9]b)', text))
 

выход

 ['12:00']
 

Если вы хотите узнать больше о b прочтении документов python re

Комментарии:

1. @MikeM re.findall возвращает список найденного текста. Скобки в выводе являются результатом печати списка. Который в данной ситуации содержит только 1 элемент.

2. @MikeM о, ты имеешь в виду открывающие и закрывающие скобки? Бьет меня.

Ответ №2:

Использование (0?[1-9]|1[0-2]):[0-5][0-9] вместо (^[0-2][0-3]:[0-5][0-9]$)

Комментарии:

1. Как это когда-нибудь будет соответствовать, скажем, 23:15 ?

2. @pepoluan Выше регулярное выражение используется для 12-часового формата, поэтому с 24-часовым форматом, пожалуйста, используйте ([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]