Python - 检查给定的邮政编码(或城市)是否在捷克共和国

Python - check if given zip code (or city) is in Czech Republic

我要对我们公司的数据库进行一些地址验证,问题是除了捷克共和国之外还有 97 个左右的国家。他们是少数,不需要验证。我仍然需要以某种方式将它们分开,因为我目前用于验证的 API 只能向我发送未找到的响应。

所以我正在寻找一些工具来识别捷克邮政编码或城市等。在 python。

捷克邮政编码的正则表达式是[0-9]{3} [0-9]{2}|[0-9]{5}

你可以简单地检查一下 re module

import re
regex = r"[0-9]{3} [0-9]{2}|[0-9]{5}"
if re.match(zipcode, regex):
    print("match")
else:
    print("not a match")

您也可以使用 pgeocodehttps://pypi.org/project/pgeocode/

使用 RegEx 并构建匹配 Czest Republic 邮政编码的模式。

根据维基百科捷克共和国邮政编码如下: <3 numbers><space><2 numbers>

添加到 您还应该添加 \b 以确保单词边界。

import re

zip_codes = [
    "123 4",
    "123 45",
    "123 456",
    "1234",
    "12345",
    "123456"
]

for zip_code in zip_codes:
    match = re.match(pattern=r"(\b[\d]{3}[\s][\d]{2}\b|\b[\d]{5}\b)", string=zip_code)
    if match:
        print(f"Match for {zip_code}. Match result: {match.group()}.")
    else:
        print(f"No match for {zip_code}.")

输出:

No match for 123 4.
Match for 123 45. Match result: 123 45.
No match for 123 456.
No match for 1234.
Match for 12345. Match result: 12345.
No match for 123456.

编辑 使用这个方便的网站 https://regex101.com/ 来帮助您构建正则表达式模式。

所以我自己找到了答案。

感谢 geopy 库,我可以区分所选地址是哪个州。

输入:

from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="geoapiExercises")
location = geolocation.geocode('city-name')
print(location.address)

输出(如果城市名称 == 布尔诺):

Brno, okres Brno-město, Jihomoravský kraj, Jihovýchod, Česko

我还发现,您可以用您的语言插入另一个国家/地区的城市名称,它无论如何都会找到它,这非常方便。

输出(如果城市名称== Mníchov):

München, Bayern, Deutschland