Как нормализовать '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']

DEMO

Вы могли бы сделать это с 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(",")])
Другие вопросы по тегам