我编写了一个简单的类,它接受输入的zip或邮政编码,如果碰巧是全数字且长度小于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.
在调试器中运行它,很明显正则表达式不匹配。
答案 0 :(得分:6)
您的正则表达式有效,它是format
,因为您尝试为字符串传递整数格式,和其他方式回合,和采用旧式%
语法......
在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
答案 1 :(得分:3)
您的format
代码已经倒退了。
return "{:05d}".format(int(self.rawData))