#python #regex #re
Вопрос:
У меня есть файл с тысячами форматов времени. Некоторые из них имеют стандартные форматы, в то время как за другими следуют запятая и три цифры, подобные этой:
Standard format: 00:00:44
Followed by comma and three digits: 00:00:46,235
Я удалил стандартные форматы, используя следующее регулярное выражение:
text = re.sub(r'^((?:[01]d|2[0-3]):[0-5]d:[0-5]d$)', '', text)
И это нормально. Но для формата времени, за которым следуют запятая и три цифры, ничто из того, что я пробовал до сих пор, не помогло мне удалить их. Пожалуйста, как я могу удалить этот шаблон нечетного формата времени?
Ответ №1:
Ваше регулярное выражение соответствует стандартному формату времени.
r'^((?:[01]d|2[0-3]):[0-5]d:[0-5]d$)'
Просто добавьте запятую в конце и сделайте ее необязательной.
r'^((?:[01]d|2[0-3]):[0-5]d:[0-5]d(?:,d{3})?$)'
Объяснение для (?:,d{3})?
:
(?: ) Non-capturing group
,d{3} Comma, then three digits
? Match zero or one times
Комментарии:
1. Спасибо, @Pranav, ваше регулярное выражение разрешило оба формата времени сразу. Еще раз большое вам спасибо.
2. Спасибо за объяснение, @Pranav! Действительно очень, очень полезно!!
3. @CygnusX-1 не беспокойтесь, рад помочь 🙂
Ответ №2:
Самый быстрый и грязный способ-это использовать split()
:
text = text.split(",")[0]
text = re.sub(r'^((?:[01]d|2[0-3]):[0-5]d:[0-5]d$)', '', text)
Вы также можете обновить регулярное выражение, чтобы использовать добавление дополнительной части в конце.
text = re.sub(r'^((?:[01]d|2[0-3]):[0-5]d:[0-5]d),?d{0,3}
Комментарии:
1. В Python (и IRL ) секунды могут начинаться с a
6
.2. Спасибо тебе @Натаниэль.
3. @KlausD Это действительно так, хотя, может быть, лучший комментарий для ОП? Хотя, без дополнительного контекста (откуда берутся эти цифры? Служит ли регулярное выражение для фильтрации неверных данных?) Мне было бы трудно решить, включать ли это.
Ответ №3:
С помощью re.sub
:
inp = "Followed by comma and three digits: 00:00:46,235"
output = re.sub(r'b(d{2}:d{2}:d{2}),d{3}', r'1', inp)
print(output) # Followed by comma and three digits: 00:00:46
Комментарии:
1. Спасибо тебе, @Тим.
, '', text)
Комментарии:
1. В Python (и IRL ) секунды могут начинаться с a
6
.2. Спасибо тебе @Натаниэль.
3. @KlausD Это действительно так, хотя, может быть, лучший комментарий для ОП? Хотя, без дополнительного контекста (откуда берутся эти цифры? Служит ли регулярное выражение для фильтрации неверных данных?) Мне было бы трудно решить, включать ли это.
Ответ №3:
С помощью re.sub
:
Комментарии:
1. Спасибо тебе, @Тим.