#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]