我正在编写一个脚本,该脚本使用zfill向Python3中的正则表达式匹配的数字添加前导零。
这是我的密码:
#!/usr/bin/env python
import re
string = "7-8"
pattern = re.compile("^(\d+)-(\d+)$")
replacement = "-{}-{}-".format(
"\\1".zfill(2),
"\\2".zfill(3)
)
result = re.sub(pattern, replacement, string)
print(result)我期望的输出是将第一个数字填充到宽度中的两个字符,将第二个数字填充到三个字符。例如:
-07-008-相反,我得到了:
-7-08-为什么比预期少一个零?
发布于 2018-08-27 19:46:57
您正在填充用于回引用的常量,这些常量已经是两个字符(\和int),对于第一个字符没有留下额外的零空间,对于第二个字符只留下一个空格。
相反,您可以将一个函数作为您的替代传递给re.sub,并在其中执行z填充:
def repl_fn(m):
return f'-{m.group(1).zfill(2)}-{m.group(2).zfill(3)}-'
result = re.sub(pattern, repl_fn, string)
print(result)
# -07-008-现在在替换时,而不是像在代码中那样,在替换之前完成z填充。
https://stackoverflow.com/questions/52046025
复制相似问题