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

使用Power Query从非结构化地址字段提取5位邮政编码

从地址字段提取5位邮政编码

问题背景

我有一列混杂了街道名、门牌号、城市和邮政编码的地址数据,需要从中精准提取出唯一的5位数字邮编。手头的地址示例如下:

SAINT REIMS 21 RUE DU MOULIN FLORE 51421 NEULLY LS REIMS
ALLEE DES AIGUERELLES 5 MONTPELLIER 01480
RUE DE CAMILLE FLORIENT 123 PARIS 25123
MOTPELLIER, ZAC DES EMPRENEURS 34123 SAINT JEAN DE VEDAS
AVENIDA DE LOS OLMOS S/N POLIGONO GRANDE 42523 PUERTO DE SAGUNTO
C/MAYOR 2321, MARBELLA, MALAGA

(翻译后的中文示例:)

兰斯圣区 21 磨坊花街 51421 讷伊莱斯兰斯
艾盖雷勒巷 5 蒙彼利埃 01480
卡米尔·弗洛里安街 123 巴黎 25123
蒙彼利埃,创业者开发区 34123 圣让德韦达
奥尔莫斯大道 S/N 大园区 42523 萨贡托港
市长街 2321,马贝拉,马拉加

解决方案

最靠谱的方式是用正则表达式匹配5位连续数字——毕竟门牌号基本都是1-4位,不会和5位邮编搞混。下面是不同场景下的实现方法:

Excel/谷歌表格

直接用REGEXEXTRACT函数,公式写在目标单元格里:

=REGEXEXTRACT(A1,"\b\d{5}\b")
  • \b是单词边界,保证提取的是完整的5位数字,不会是更长数字的一部分;\d{5}就是匹配连续5位数字。

Python

用内置的re模块就行,代码示例:

import re

# 示例地址列表
address_list = [
    "SAINT REIMS 21 RUE DU MOULIN FLORE 51421 NEULLY LS REIMS",
    "ALLEE DES AIGUERELLES 5 MONTPELLIER 01480",
    "RUE DE CAMILLE FLORIENT 123 PARIS 25123",
    "MOTPELLIER, ZAC DES EMPRENEURS 34123 SAINT JEAN DE VEDAS",
    "AVENIDA DE LOS OLMOS S/N POLIGONO GRANDE 42523 PUERTO DE SAGUNTO",
    "C/MAYOR 2321, MARBELLA, MALAGA"
]

# 遍历提取邮编
for addr in address_list:
    match = re.search(r'\b\d{5}\b', addr)
    print(match.group() if match else "无有效邮编")

运行后会逐个输出每个地址的邮编,最后那个没5位邮编的会显示“无有效邮编”。

SQL(以MySQL为例)

用REGEXP_SUBSTR函数提取:

SELECT REGEXP_SUBSTR(address_column, '[0-9]{5}') AS zip_code
FROM your_table_name;

要是怕匹配到更长数字里的片段,就把正则改成'\\b[0-9]{5}\\b'(MySQL里要转义\b)。

补充说明

  • 如果你的地址里邮编基本都在末尾,也可以用'\d{5}$'这个正则,专门匹配结尾的5位数字,精准度更高。
  • 遇到没有5位邮编的地址,记得提前处理空值情况,避免报错。

内容的提问来源于stack exchange,提问作者Amilcar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:07:23