Как нормализовать '1:2:3' до '01:02:03'с помощью re модуля Python?
Я хочу нормализовать строки, как
'1:2:3','10:20:30'
в
'01:02:03','10:20:30'
используя модуль re Python, поэтому я пытаюсь выбрать строку типа "1:2:3", а затем сопоставить одно число "1", "2", "3"..., вот мой шаблон:
^\d(?=\D)|(?<=\D)\d(?=\D)|(?<=\D)\d$
это работает, но я думаю, что шаблон не достаточно прост, кто-нибудь может помочь мне упростить его? или используйте map()/split(), если он более сложный.
3 ответа
Решение
\b
Соответствует между символом слова и несловесным символом.
>>> import re
>>> l = ['1:2:3','10:20:30']
>>> [re.sub(r'\b(\d)\b', r'0\1', i) for i in l]
['01:02:03', '10:20:30']
Вы могли бы сделать это с re
, но почти никто не узнает, как это работает потом. Я бы порекомендовал это вместо этого:
':'.join("%02d" % int(x) for x in original_string.split(':'))
Более понятно, как это работает.
re.sub(r"(?<!\d)(\d)(?!\d)",r"0\1",test_str)
Вы можете упростить это до этого. См. Демонстрацию.
https://regex101.com/r/nD5jY4/4
Если строка похожа
x="""'1:2:3','10:20:30'"""
Тогда делай
print ",".join([re.sub(r"(?<!\d)(\d)(?!\d)",r"0\1",i) for i in x.split(",")])