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

如何通过正则表达式拆分无空格拼接的错误格式化地址数据

地址拼接拆分正则问题及解决方案

问题描述

我正在修正街道地址与城市/城镇信息无空格拼接的错误地址数据。识别拆分点最简单的方法是查找道路类型关键词(如STREET、ST.)后紧跟单词的位置,例如:

1201 WEST FRONT STREETCHESTER PA 19013-3496

目前暂不需要处理SOUTH这类其他词作为拆分点的场景,如下示例暂时无需适配:

703 6TH STREET SOUTHTEXAS CITY TX 77590

我当前使用的正则为(ST(?:REET)?)\.?([A-Z]{3,}),大部分场景适配良好,但在第二个示例中会匹配到ST + REET的组合。我知道正则默认是贪婪匹配,按照我的认知第一捕获组应该会阻止第二捕获组触发,我也尝试将正则改写为(STREET|ST)\.?([A-Z]{3,}),但问题未得到解决。

问题原因

正则的分支选择逻辑是顺序优先而非最长优先:当你把短分支ST放在前面,或者用可选组(?:REET)?时,正则扫描到字符串中的ST开头位置时,只要后续的.?([A-Z]{3,})规则能匹配上剩余内容,就会直接命中短分支,不会回退尝试更长的STREET匹配。比如第二个示例中的STREET字段,正则匹配到开头的ST后,后续的REET SOUT刚好符合[A-Z]{3,}的规则,因此直接完成匹配,不会尝试匹配更长的STREET关键词。

最终解决方案

以Michal提供的正则为基础,最终可用正则如下,可适配Street、Lane、Drive、Avenue、Boulevard、Highway等多种道路类型,也支持按方位词拆分EPA的TSCA地址数据:

\s((?:(?!STREET|STATE)ST|STREET|LANE|LN|(?!DRIVE)DR|DRIVE|ROAD|RD|[0-9]+|(?!AVENUE)AVE|AVENUE|BOULEVARD|BLVD|HWY|HIGHWAY|WEST|EAST|(?!NORTHEAST|NORTHWEST)NORTH|(?!SOUTHEAST|SOUTHWEST)SOUTH|N\.|S\.|W\.|E\.)\.?)(?=[A-Z]{3,})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:15:04