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

时间:2018-05-01 16:43:14

标签: python regex

我编写了一个简单的类,它接受输入的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.

在调试器中运行它,很明显正则表达式不匹配。

2 个答案:

答案 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))