簡體   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