Python: zfill с нулями заполнения rsub - PullRequest
1 голос
/ 25 сентября 2019

Я написал скрипт для стандартизации набора значений, извлеченных из банка данных, используя (в основном) r.sub.Я с трудом включаю zfill, чтобы заполнить числовые значения 5 цифрами.

Ввод

FOO5864BAR654FOOBAR

Требуемый вывод

FOO_05864-BAR-00654_FOOBAR

Использование re.sub У меня до сих пор

FOO_5864-BAR-654_FOOBAR

Один вариант был сделать повторно.sub с захватом групп для каждого возможного формата [т.е. ниже], который работает, но я не думаю, что это правильный способ сделать это.

(\d)         sub   0000\1
(\d\d)       sub   000\1
(\d\d\d)     sub   00\1
(\d\d\d\d)   sub   0\1

1 Ответ

0 голосов
/ 26 сентября 2019

Предполагая, что все ваши входные данные представляют собой буквы-цифры-буквы-цифры-буквы (по одной или более от каждой), вам просто нужно заполнить нулями вторую и четвертую группы из совпадения:

import re

s = 'FOO5864BAR654FOOBAR'
pattern = r'(\D+)(\d+)(\D+)(\d+)(\D+)'
m = re.match(pattern, s)
out = '{}_{:0>5}-{}-{:0>5}_{}'.format(*m.groups())
print(out)  # -> FOO_05864-BAR-00654_FOOBAR

Вы также можете сделать это с str.zfill(5), но метод str.format намного чище.

...