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

如何用Groovy为地址字符串的数字添加空格(规避序数词异常)

问题需求

需要将地址字符串中的数字逐个用空格分隔,兼容所有常见地址格式。例如:

"1234 South St City, NY 12345" → "1 2 3 4 South St City, NY 1 2 3 4 5"

过往尝试与问题
  • 尝试1:能实现数字分隔,但会错误处理"1st"这类带序数词的地址片段,给"1"和"st"之间添加空格,不符合需求
def address = "1234 South St City, NY 12345"
address = address.replaceAll(/(\d)/, '$1 ');
address = address.trim();
println(address);
  • 尝试2-4:仅对长度3及以上的数字序列添加末尾空格,完全没实现逐个数字分隔的核心需求
// 尝试2
def address = "1234 South St City, NY 12345"
address = address.replaceAll(/\d{3,}/, '$0 ');
address = address.trim();
println(address);

// 尝试3
def address = "1234 South St City, NY 12345"
address = address.replaceAll(/(\d{3,})/, '$1 ');
address = address.trim();
println(address);

// 尝试4
def address = "1234 South St City, NY 12345"
address = address.replaceAll(/\d{3,5}/, '$0 ');
address = address.trim();
println(address);
解决方案

使用带正向预查的正则表达式,仅对后面是数字或非字母字符的数字添加空格,避免破坏序数词格式:

def address = "123 1st St NW Hampton, IA 12345"
address = address.replaceAll(/(\d)(?=\d|[^a-zA-Z])/, '$1 ')
address = address.trim()
println(address)

正则逻辑说明

  • (\d):捕获单个数字
  • (?=\d|[^a-zA-Z]):正向预查规则,确保当前数字的后续字符要么是另一个数字,要么是非字母字符(空格、逗号等),这样就不会匹配"1st"里的1(因为后面是字母s)

测试验证:

输入:"123 1st St NW Hampton, IA 12345"
输出:"1 2 3 1st St NW Hampton, IA 1 2 3 4 5"

完全满足需求,既分隔了纯数字序列的每个数字,又保留了地址中序数词的原有格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 03:42:18