Python:使用rsub填充零填充

时间:2019-09-25 18:11:31

标签: python padding

我写了一个脚本来标准化使用(主要是)r.sub从数据库提取的一堆值。我很难合并zfill来填充5位数字的数值。

输入

FOO5864BAR654FOOBAR

所需的输出

FOO_05864-BAR-00654_FOOBAR

使用到目前为止的re.sub

FOO_5864-BAR-654_FOOBAR

一种选择是对每种可能的格式进行re / 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 :(得分:0)

假设您输入的所有内容均为字母-数字-字母-数字-字母形式(每个字母一个或多个),则只需将匹配项中的第二组和第四组填为零即可。

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方法更加简洁。