首页 > 解决方案 > (找到 5 位的第一个实例)'TypeError:只能将 str(不是“re.Pattern”)连接到 str'

问题描述

通过以下内容,我搜索了一个包含 5 位数字和一个尾随 4 位数字的邮政编码。即23220-3233适用于我 90% 的条目...

但是,有一些只是 5 位数的邮政编码(即没有 XXXX-XXXX 尾随)。

我怎么能一起搜索 5 个数字的第一个实例?我正在尝试以下内容;尽管我只需要合并“一审”。但截至目前;我已经得到了' TypeError: can only concatenate str (not "re.Pattern") to str'。

NameNada = NameCleanST.replace("%", "")

zip_code = re.search(r'(?:[^\d]|^)(\d{5}\-\d{4})(?:[^\d]|$)', clean_content)

if zip_code:
    Zip = zip_code.group(0)[:6]

    print (NameNada)
    print(Zip)
    with open("./pdfs/TOTAL/" + NameNada + Zip + ".pdf", "wb") as outputStream:
        output.write(outputStream)
else:
    zip_five = re.compile("\d{5}") # start attempt for first instance of 5 digits
    print(zip_five)
    with open("./pdfs/TOTAL/" + NameNada + zip_five + ".pdf", "wb") as outputStream:
        output.write(outputStream)

标签: pythonregexpython-3.7

解决方案


您可以使用可选组(?:....)?来匹配尾随部分:

\b[0-9]{5}(?:-[0-9]{4})?\b

正则表达式演示


推荐阅读