Skip to main content
 首页 » 编程设计

python之为什么这个 python 正则表达式不起作用

2025年05月04日27itcoder

我写了一个简单的类,它接受输入的邮政编码,如果它恰好是全数字且长度少于 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