我写了一个脚本来标准化使用(主要是)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/