正则表达式匹配多结构地址时城市字段匹配出错该如何解决
正则匹配城市字段解决方案
核心调整思路
你之前的正则(\w.*,|\w.*$)存在两个问题:
- 将逗号纳入了捕获组的匹配范围,导致带国家的地址匹配结果会携带末尾逗号
- 没有对匹配的终止边界做无消耗校验,无法自动过滤分隔符
调整后的正则通过正向预查限定匹配边界,同时兼容多段、带特殊字符的城市名,写法如下:([\w\s-]+)(?=,|$)
正则各部分说明
[\w\s-]+:匹配由字母、数字、空格、连字符组成的连续内容,覆盖多单词、带连字符的城市名(如New York、Saint-Jean-Port-Joli都可正常匹配)(?=,|$):正向肯定预查,属于零宽断言,不会消耗匹配字符,仅要求当前匹配内容的后续位置要么是逗号,要么是字符串结尾,自动跳过逗号不纳入捕获结果
测试验证
不同场景下的匹配结果如下:
- 输入
Paris→ 捕获结果:Paris - 输入
Paris, France→ 捕获结果:Paris - 输入
Saint-Jean-Port-Joli, Canada→ 捕获结果:Saint-Jean-Port-Joli - 输入
Rio de Janeiro→ 捕获结果:Rio de Janeiro
内容的提问来源于stack exchange,提问作者ichbintim
相关产品推荐
相关产品推荐

