我想将pad零填充到字符串中的数字。例如,字符串
hello120_c
填充到5位数应该成为
hello00120_c
我想使用re.sub
进行替换。这是我的代码:
>>> re.sub('(\d+)', r'\1'.zfill(5), 'hello120_c')
返回
>>> 'hello000120_c'
有6位而不是5位。仅'120'.zfill(5)
检查就会'00120'
。此外,re.findall
似乎确认正则表达式与完整'120'
匹配。
是什么导致re.sub
采取不同的行动?
答案 0 :(得分:2)
您无法直接使用反向引用。使用lamda:
re.sub(r'\d+', lambda x: x.group(0).zfill(5), 'hello120_c')
# => hello00120_c
另请注意,您不需要捕获组,因为您可以通过.group(0)
访问匹配的值。另外,请注意用于声明正则表达式的r'...'
(原始字符串文字)。
请参阅IDEONE demo:
import re
res = re.sub(r'\d+', lambda x: x.group(0).zfill(5), 'hello120_c')
print(res)