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

输入值

FOO5864BAR654FOOBAR


期望的输出

FOO_05864-BAR-00654_FOOBAR


到目前为止我使用re.sub

FOO_5864-BAR-654_FOOBAR


一种选择是对每种可能的格式进行分组捕获。下面],该方法有效,但我认为这不是正确的方法。

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

最佳答案

假设您输入的都是字母-数字-字母-数字-字母的形式(每个字母一个或多个),则只需将匹配的第二和第四组填零即可:

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

关于python - Python:使用rsub填充零填充,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58104301/

10-11 09:28
查看更多