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

如何利用正则环视获取符合要求的街道地址匹配结果

问题描述

需要从以下文本中提取以数字开头、包含下划线且以逗号结尾的街道地址字段:

001 ALLAN Witham Ross 13 Every_Street, Welltown Greenkeeper 002 ALLARDYCE Margaret Isabel 49 Bell_Road, Musicville Housewife 003 ALLARDYCE Mervyn George 49 Bell_Road, Musicville Company Mngr

期望匹配结果:

13 Every_Street, Welltown
49 Bell_Road, Musicville
49 Bell_Road, Musicville

当前使用的正则表达式:

(?ms)([0-9]+\s[A-Z][a-z].+(?=,))

存在问题:该表达式会过度匹配,从第一个地址的数字开始一直匹配到后续很远的逗号前,仅得到2个结果,无法正确提取3个目标地址。

解决方案

可以使用以下正则表达式实现需求:

\b\d+\s\w+_\w+,\s\w+

正则说明

  • \b:匹配单词边界,确保地址开头的数字不会和前面的用户编号(如001)混淆
  • \d+:匹配地址起始的数字(如13、49)
  • \s:匹配数字后的空格
  • \w+_\w+:精准匹配包含下划线的街道名称(如Every_Street、Bell_Road)
  • ,\s:匹配街道名后的逗号和空格
  • \w+:匹配逗号后的城市名称(如Welltown、Musicville)

如果需要适配更复杂的街道命名(比如街道名包含多个下划线或额外字符),可以改用非贪婪模式避免过度匹配:

\b\d+\s.+?_\w+,\s\w+

这里的.+?是非贪婪匹配,会尽可能少地匹配字符,直到找到包含下划线的部分,再匹配到后续的逗号和城市名,确保不会跨地址匹配。

原正则失效原因

原正则中的.+是贪婪匹配,会尽可能多地抓取字符,直到遇到文本中靠后的逗号,导致第一个匹配结果覆盖了多个地址内容,最终只得到2个结果。改用精准匹配下划线结构或非贪婪模式,就能限制匹配范围,得到正确的3个地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:25:26