Вот альтернативный вариант, который вы можете попробовать (который также будет работать с числами с плавающей запятой и отрицательными числами):
s = "-123.45min"
value = s.to_f # => -123.45
unit = s[/[a-zA-Z]+/] # => "min"
Как и метод to_f
и to_i
в Ruby, он просто "попытается" получить результат. Поэтому, если вы не предоставите единицу, unit
будет nil
- если вы предоставите только единицу, значение будет 0.
"123-34min" value = 123, unit = "min"
"min" value = 0 unit = "min"
"-1234" value = -1234 unit = nil
"123-foo-bar" value = 123 unit = "foo"
P.S. Конечно, это предполагает, что в вашем отряде нет чисел.