Python re.sub没有返回预期的int字符串

时间:2016-01-21 10:18:33

标签: python regex

我想将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采取不同的行动?

1 个答案:

答案 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)