Ruby:将字符串中的所有整数增加1

5
我正在寻找一种简洁的方法,将字符串中所有的整数加 1,并返回完整的字符串。
例如:
"1 plus 2 and 10 and 100"

需要成为
"2 plus 3 and 11 and 101"

我可以很容易地找到所有整数,使用
"1 plus 2 and 10 and 100".scan(/\d+/)

但我在尝试增加并将这些部分重新组合时卡住了。
提前感谢。
3个回答

10

您可以使用 String#gsub 的块形式

str = "1 plus 2 and 10 and 100".gsub(/\d+/) do |match|
  match.to_i + 1
end

puts str

输出:

2 plus 3 and 11 and 101

太棒了!我知道有一种超级简单的方法来做到这一点。谢谢! - NullRef

5
gsub 方法可以接受一个块,因此您可以这样做。
>> "1 plus 2 and 10 and 100".gsub(/\d+/){|x|x.to_i+1}
=> "2 plus 3 and 11 and 101"

0
你的正则表达式的问题在于它没有保留原始字符串以便放回。我的做法是使用空格进行分割,使用 w.to_i != 0 检测哪些是单词或整数(不将0视为整数,你可能需要改进这一点),然后加1并重新连接起来:
s = "1 plus 2 and 10 and 100"

s.split(" ").map{ |e| if (e.to_i != 0) then e.to_i+1 else e end }.join(" ")
=> "2 plus 3 and 11 and 101" 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接