Ruby Regex: Math on Backreferences - PullRequest
       1

Ruby Regex: Math on Backreferences

2 голосов
/ 13 сентября 2010

Мне нужно заменить все минуты часами в файле.

Предположим, что необработанный файл выглядит так: 120m 90м

Должен измениться на: 2h 1,5Н

Ответы [ 2 ]

6 голосов
/ 13 сентября 2010

Если вы можете жить с ним, печатая «2.0» вместо «2», вы можете просто сделать:

"120m 90m".gsub(/(\d+)m/) { "#{$1.to_f / 60.0}h"}
#=> "2.0h 1.5h"

Если вам нужно, чтобы распечатать его без «.0», вам необходимо проверитьделится ли число на 60 и, если это так, возвращает $1.to_i / 60 вместо $1.to_f / 60.0.

В качестве альтернативы вы можете вызвать to_s в плавающей запятой и удалить .0, если строка заканчивается на.«

1 голос
/ 13 сентября 2010

дополнение к ответу sepp2k.

"120m 90m".gsub(/(\d+)m/) { "#{($1.to_f / 60.0).to_s.gsub(/\.0$/, '')}h"}
#=> "2h 1.5h"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...