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

2024-09-27 07:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个简单的类,它接受一个输入的邮政编码,然后返回该值,或者如果该值恰好都是数字且长度小于5位,则零将其填充为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。你知道吗

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


Tags: 代码importselfredatareturnifinit
2条回答

你的正则表达式可以工作,但format不能,因为你试图传递一个整数格式的字符串,反过来,用旧式%语法。。。你知道吗

str.format中,string对象具有格式(使用{}样式语法),要格式化的string/integers/whatever对象作为参数传递。你知道吗

替换(例如):

if re.match(r"^\d{1,4}$", self.rawData):
    return "{:05}".format(int(self.rawData))

如果没有格式,您也可以使用zfill来左填充零(更快,因为您不必转换为整数)

return self.rawData.zfill(5)

而且您甚至可能不需要测试数字的数量,只要zfill不管是什么,或者如果zipcode只是数字:

def __repr__(self):
   return self.rawData.zfill(5) if self.rawData.isdigit() else self.rawData

你的format代码倒过来了。你知道吗

return "{:05d}".format(int(self.rawData))

相关问题 更多 >

    热门问题