如何修改正则捕获组 实现两种格式地址的字段分组解析
正则调整方案
原有正则强制要求街道地址后必须匹配逗号,因此无法兼容仅用空格分隔、无逗号的地址格式,同时存在邮编匹配规则不严谨、冗余匹配项问题,调整后的正则如下:
^(.*?(?:Lane|Street|Boulevard|Crescent|Place|Road|Highway|Avenue|Drive|Circuit|Parade|Telopea|Nicklin Way|Terrace|Square|Court|Close|Endeavour Way|Esplanade|East|The Centreway|Mall|Quay|Gateway|Low Way|Point|Rd|Morinda|Way|Ave|St|South Steyne|Broadway|HQ|Expressway|Castlereagh|Meadow Way|Track|Kulkyne Way|Narabang Way|Bank))[,\s]+(.*?)[,\s]+([A-Z]{2,3})[,\s]+(\d{3,4})$
核心修改点
- 将各分组之间原先强制匹配逗号的规则,替换为匹配1个及以上的逗号或空白字符(
[,\s]+),同时兼容「逗号+空格分隔」「仅空格分隔」两类地址格式 - 修正邮编匹配规则,将原先可匹配0位数字的
\d{,4}调整为\d{3,4},兼顾现有测试用例中3位、4位邮编的场景,若确认所有邮编均为4位可直接改为\d{4}提升匹配精度 - 删除街道后缀列表中重复的
Street项,移除无意义的空非捕获组(?:)?,精简匹配逻辑
匹配验证
两类地址均可正确拆分为4个目标分组:
带逗号分隔的原有地址样例
以3-11 Hamilton Street, Townsville City, QLD, 4810为例,捕获结果:
- street_address:
3-11 Hamilton Street - subrub:
Townsville City - state:
QLD - postcode:
4810
无逗号分隔的新增地址样例
以1, 3, 5 Demeter Street & 12 Hermes Avenue ROUSE HILL NSW 2155为例,捕获结果:
- street_address:
1, 3, 5 Demeter Street & 12 Hermes Avenue - subrub:
ROUSE HILL - state:
NSW - postcode:
2155
以31 Stephen Street SOUTH TOOWOOMBA QLD 4350为例,捕获结果:
- street_address:
31 Stephen Street - subrub:
SOUTH TOOWOOMBA - state:
QLD - postcode:
4350
内容的提问来源于stack exchange,提问作者dougj
相关产品推荐
相关产品推荐

