如何在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.
相关产品推荐
相关产品推荐

