2011-08-31 8 views
5

文字列内のすべての整数を+1し、完全な文字列を返す簡潔な方法を探しています。例えばRuby:文字列のすべての整数を+1で増やします。

"1 plus 2 and 10 and 100" 

ニーズ

"2 plus 3 and 11 and 101" 

になるために私は

"1 plus 2 and 10 and 100".scan(/\d+/) 

で非常に簡単にすべての整数を見つけることができますが、私がしようとし、この時点でこだわっています増分して部品を戻します。

ありがとうございます。

答えて

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 

:あなたはこのを行うことができますので、gsub方法は、ブロック内に取ることができ

2 plus 3 and 11 and 101 
+0

Sweet!私はこれを行うための超簡単な方法があることを知っていた。ありがとう! – NullRef

+1

それはとても涼しいです。グッサブがブロックしたことを知らなかった。 – jergason

0

あなたの正規表現のことは、元の文字列をチェーンに保存しないために戻すことができないことです。私がやったことは1を追加し、それをバックに参加、(整数として0を数えていない、あなたがこれを改善する場合があります)、スペースを使用して、それを分割w.to_i != 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" 
5
>> "1 plus 2 and 10 and 100".gsub(/\d+/){|x|x.to_i+1} 
=> "2 plus 3 and 11 and 101" 
関連する問題