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

如何从字符串数组提取完整数字?Ruby grep正则优化及替代方案

解决Ruby数组提取完整数字的问题

问题原因

你之前用array.grep(/\d+/, &:to_i)只拿到每个数字串的首个整数,是因为正则/\d+/仅匹配连续的纯数字序列,遇到逗号、小数点这类非数字字符就会停止匹配。比如"9,999.00"里,它只会匹配开头的"9",后面的,999.00被截断,所以转成整数9。

一行代码解决方案

下面两种方式都能提取完整数字并转成数值:

方案1:改进grep匹配逻辑

先匹配包含千分位逗号、小数点的完整数字串,再清理格式转成数值:

array.grep(/\d[,\d.]*\d/).map { |str| str.delete(',').to_f }

执行后结果:[9999.0, 4948.0],如果需要整数,把to_f换成to_i即可。

方案2:用flat_map+scan更灵活

如果数组中存在单个字符串含多个数字的场景,这个方法更稳妥:

array.flat_map { |s| s.scan(/\d+(?:[,.]\d+)*/) }.map { |num| num.gsub(',', '').to_f }

正则\d+(?:[,.]\d+)*专门匹配带千分位或小数的数字格式,确保不会遗漏任何有效数字部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:15:53