Ruby: увеличивать все целые числа в строке на +1 - PullRequest
5 голосов
/ 31 августа 2011

Я ищу краткий способ увеличить все целые числа, найденные в строке, на +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 голосов
/ 31 августа 2011

Вы можете использовать блочную форму для 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
5 голосов
/ 31 августа 2011

Метод gsub может принимать блок, поэтому вы можете сделать это

>> "1 plus 2 and 10 and 100".gsub(/\d+/){|x|x.to_i+1}
=> "2 plus 3 and 11 and 101"
0 голосов
/ 31 августа 2011

С вашим регулярным выражением связано то, что оно не сохраняет исходную строку в цепочке, чтобы вернуть ее обратно. Я разбил его по пробелам, определил, какие слова или целые числа, используя 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" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...