Python正则表达式匹配人名+美国地址仅匹配部分案例问题排查
问题原因
你编写的正则采用固定段数硬匹配规则,没有兼容美国地址里门牌号后可能存在的单字母方向前缀(如W、E、S、N分别代表东西南北):
- 第一个示例的地址结构为「人名+门牌号+街道名+街道类型+单元类型+单元号+城市+州+邮编」,刚好匹配你预设的段数,可正常校验通过
- 第二个示例在门牌号和街道名之间多了代表西向的
W字段,总段数超出你预设的数量,因此匹配失败
修正后正则
^[A-Z]+ [A-Z]+ [0-9]+ (?:[A-Z] )?[A-Z]+ [A-Z]{2,4} [A-Z]{2,4} [0-9]+ [A-Z]+ [A-Z]{2} [0-9]{5}-[0-9]{4}$
调整说明
- 新增
(?:[A-Z] )?可选匹配段:放在门牌号匹配规则后,可匹配0次或1次「单大写字母+空格」的方向前缀,同时兼容两种地址结构 - 把门牌号的长度限制从
[0-9]{3,4}调整为[0-9]+,适配更多长度的门牌号场景,避免后续合法短门牌号/长门牌号被误拦截
内容的提问来源于stack exchange,提问作者user16987274
相关产品推荐
相关产品推荐

