You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python正则表达式提取荷兰邮政编码

解决Python中提取荷兰邮政编码的问题

你的问题出在JavaScript正则表达式语法和Python re模块语法的差异上——Python的re库不需要用/包裹正则表达式,也不用/i这种后缀来表示忽略大小写,而是通过flags参数来设置。另外你原正则里的^和$会要求匹配整个字符串,但你的输入字符串后面还跟着城市名称,这也是匹配失败的原因之一。

修正后的正则表达式与单例测试

先把正则改成Python兼容的版本,荷兰邮政编码的规则是:可选的NL-前缀,接着4位数字,可选空格,然后2个字母(支持大小写匹配)。

测试单个字符串的代码可以改成这样:

import re

test = '4706TR Amsterdam'
# 去掉JS风格的前后/,移除^$的严格全串匹配,用re.IGNORECASE实现大小写兼容
match = re.search(r"(?:NL-)?(\d{4})\s*([A-Z]{2})", test, flags=re.IGNORECASE)
if match:
    # 拼接数字和字母部分,得到完整邮政编码
    postal_code = match.group(1) + match.group(2)
    print(postal_code)  # 输出: 4706TR

处理整个列表的完整方案

如果要批量处理你的地址列表['4486AE Capelle aan de Ijsel', '4706TR Amsterdam'],可以写一个复用性强的函数:

import re

def extract_dutch_postal_codes(address_list):
    # 定义适配Python的荷兰邮政编码正则
    postal_code_pattern = r"(?:NL-)?(\d{4})\s*([A-Z]{2})"
    result = []
    for address in address_list:
        match = re.search(postal_code_pattern, address, flags=re.IGNORECASE)
        if match:
            # 自动处理带空格的情况(比如4486 AE会被拼接成4486AE)
            full_code = match.group(1) + match.group(2)
            result.append(full_code)
    return result

# 测试你的目标列表
addresses = ['4486AE Capelle aan de Ijsel', '4706TR Amsterdam']
print(extract_dutch_postal_codes(addresses))  # 输出: ['4486AE', '4706TR']

额外说明

  • 这个正则支持匹配带前缀的格式(比如NL-4486AE)和带空格的格式(比如4706 TR),最终都会输出无空格的标准格式。
  • 如果后续需要严格校验独立的邮政编码(不是从地址串中提取),可以把正则改成r"^(?:NL-)?\d{4}\s*[A-Z]{2}$",并配合re.fullmatch使用。

内容的提问来源于stack exchange,提问作者teller.py3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 02:57:41