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

时间:2011-08-31 03:16:37

标签: ruby regex string

我正在寻找一种简洁的方法来将字符串中的所有整数递增+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 个答案:

答案 0 :(得分:10)

您可以使用block form of 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

答案 1 :(得分:5)

gsub方法可以包含一个块,因此您可以执行此操作

>> "1 plus 2 and 10 and 100".gsub(/\d+/){|x|x.to_i+1}
=> "2 plus 3 and 11 and 101"

答案 2 :(得分:0)

正则表达式的一点是,它不会保留链中的原始字符串以便将其放回原处。我做的是使用空格分割它,使用w.to_i != 0检测哪些是单词或整数(不计算0作为整数,你可能想要改进它),添加一个,然后加入它:

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"