繁体   English   中英

为什么此python regex不起作用?

[英]Why doesn't this python regex work?

我编写了一个简单的类,该类接受输入的邮政编码或邮政编码,然后返回该值或将其零填充到五位数字(如果恰好是全数字且少于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不因为你想传递一个整数格式的字符串, 反过来, 旧式%语法...

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

您已经将format代码向后了。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM