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

如何编写正则表达式将地址字符串按街道城市邮编正确分组

正则匹配方案

原正则失效原因

你编写的正则^(.*)(?: City: *(.*))?(?: ZIP: *(.*))?$失效的核心原因是第一个分组用了贪婪匹配的(.*):它会优先匹配尽可能长的字符串,哪怕后续存在City:、ZIP:标记,也会被吞入第一个分组,导致后两个分组永远无法捕获到值。

可用正则表达式

^(.*?)(?:\s*City:\s*(.*?))?(?:\s*ZIP:\s*(.*))?\s*$

分组规则说明

  • 第一个分组(.*?):非贪婪匹配街道地址,只要后面出现City:、ZIP:标记或者字符串结束就停止匹配,无街道时返回空值
  • 第二个分组(.*?):匹配City:标记后的城市内容,无城市时返回空值
  • 第三个分组(.*):匹配ZIP:标记后的邮编内容,无邮编时返回空值
  • 正则中的\s*用于兼容标记前后可能存在的多余空格,若你的输入不存在多余空格可自行删除

测试验证结果

针对你给出的8条示例输入,匹配结果完全符合预期:

  • 输入01_foo_street City: bar_city ZIP: baz:分组1=01_foo_street,分组2=bar_city,分组3=baz
  • 输入City: bar_city ZIP: baz:分组1=``,分组2=bar_city,分组3=baz
  • 输入01_foo_street ZIP: baz:分组1=01_foo_street,分组2=``,分组3=baz
  • 输入ZIP: baz:分组1=,分组2=,分组3=baz
  • 输入01_foo_street City: bar_city:分组1=01_foo_street,分组2=bar_city,分组3=``
  • 输入City: bar_city:分组1=,分组2=`bar_city`,分组3=
  • 输入01_foo_street:分组1=01_foo_street,分组2=,分组3=
  • 输入空字符串:分组1=,分组2=,分组3=``

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:57:05