我写了一个简单的类,它接受输入的邮政编码,如果它恰好是全数字且长度少于 5 位,则返回该值或将其零填充到五位数。
为什么我的代码不起作用?
import re
class ZipOrPostalCode:
def __init__(self, data):
self.rawData = data
def __repr__(self):
if re.match(r"^\d{1,4}$", self.rawData):
return self.rawData.format("%05d")
else:
return self.rawData
if __name__ == "__main__":
z=ZipOrPostalCode("2345")
print(z)
我期望的输出是 02345。它输出 2345。
在调试器中运行,很明显正则表达式不匹配。
请您参考如下方法:
您的正则表达式有效,但 format 无效,因为您正试图为字符串传递整数格式,而相反,and 使用旧式 % 语法...
在 str.format 中,字符串对象具有格式(使用 {} 样式语法)并且要格式化的字符串/整数/任何对象都作为 参数。
替换(例如)为:
if re.match(r"^\d{1,4}$", self.rawData):
return "{:05}".format(int(self.rawData))
没有格式,您还可以使用 zfill 向左填充零(更快,因为您不必转换为整数)
return self.rawData.zfill(5)
而且您可能甚至不需要测试位数,只需 zfill 无论如何或仅当邮政编码仅为数字时:
def __repr__(self):
return self.rawData.zfill(5) if self.rawData.isdigit() else self.rawData
