【发布时间】:2016-01-21 10:18:33
【问题描述】:
我想将零填充到字符串中的数字。例如,字符串
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 的行为不同?
【问题讨论】:
-
你是
zfilling 之前替换。您的代码相当于re.sub('(\d+)', r'000\1', 'hello120_c')。您必须使用回调,如 Wiktor 的回答,将填充推迟到您实际匹配时。 -
@tobias_k 感谢您的解释:)。