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

如何在Ruby的scan方法中保留操作符与逗号并提取内容?

使用Ruby的scan方法保留操作符号和逗号

当然可以用scan实现你的需求,问题出在你原来的正则表达式只匹配了数字(/\d+/),所以符号和逗号都被过滤掉了,只要调整正则就能保留你需要的内容。

先纠正你代码里的两个小问题:

  • 你的var是数组,直接调用var.scan会遍历数组元素,但通常我们需要对数组里的字符串单独处理,比如取var[0]
  • 原来的map{|i| print i.to_i}会直接把数字逐个打印出来,导致输出混乱,建议用p或者puts查看结果更清晰

下面是几种符合你需求的实现方式:

方式1:保留逗号和带符号的数字(拆分成分隔的元素)

如果你想把字符串拆分成包含逗号和带符号数字的数组,用正则/[+-]?\d+|,/,这个规则会匹配带可选正负号的数字或者逗号:

var = ["+100,-20,-15,+30"]
result = var[0].scan(/[+-]?\d+|,/)
p result # 输出:["+100", ",", "-20", ",", "-15", ",", "+30"]

方式2:只提取带符号的数字(去掉逗号)

如果你的目标是提取所有带正负号的数字,忽略逗号,用正则/[+-]\d+/即可:

var = ["+100,-20,-15,+30"]
numbers = var[0].scan(/[+-]\d+/)
p numbers # 输出:["+100", "-20", "-15", "+30"]

方式3:直接转换成整数数组(保留正负号)

如果后续需要对这些数字做计算,可以先按逗号拆分字符串,再转成整数:

var = ["+100,-20,-15,+30"]
numbers = var[0].split(",").map(&:to_i)
p numbers # 输出:[100, -20, -15, 30]

正则表达式说明

  • [+-]?:匹配0次或1次正负号(?表示可选)
  • \d+:匹配1个或多个数字
  • |:逻辑或,匹配满足任意一侧规则的内容

内容的提问来源于stack exchange,提问作者Leticia S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:15:38