Как я могу сопоставить образец строки внутри строки, а затем извлечь ее в переменную - PullRequest
2 голосов
/ 20 сентября 2010

Я столкнулся с проблемой, которую не могу решить.Я извлек строку из веб-страницы в переменную.скажем, ради аргумента это:

rhyme = "три слепых мыши Версия 6.0"

, и я хочу иметь возможность прежде всего найти номер версии в этой строке (6.0) иво-вторых, извлеките это число в другую отдельную переменную - (я хочу специально извлечь не больше, чем «6.0»)

Надеюсь, я уточнил это достаточно, если нет, пожалуйста, спросите меня что-нибудь, что вам нужно знать, и я получуобратно к вам как можно скорее.

Ответы [ 3 ]

5 голосов
/ 20 сентября 2010

Сначала вам нужно решить, каким должен быть шаблон для номера версии. Один из вариантов: \d+(\.\d+)*$ (число, за которым следует ноль или более (точка, за которой следует число) в конце строки).

Затем вы можете использовать String#[], чтобы получить подстроку, соответствующую шаблону:

rhyme[ /\d+(\.\d+)*$/ ] #=> "6.0"
2 голосов
/ 20 сентября 2010

Вам нужно использовать регулярные выражения. Я бы использовал rhyme.scan(/(\d+\.\d+)/), поскольку он может возвращать массив, если происходит несколько совпадений. Он также может занимать блок, так что вы можете добавить проверки диапазона или другие проверки, чтобы убедиться, что выбран правильный.

version = "0.0"
rhyme = "three blind mice Version 6.0"
rhyme.scan(/(\d+\.\d+)/){|x| version = x[0] if x[0].to_f < 99}
p version

Если входным данным можно доверять, чтобы получить только одно совпадение или если вы всегда собираетесь использовать первое совпадение, вы можете просто использовать решение в этом ответе .

Редактировать: Итак, после нашего обсуждения просто перейдите к этому ответ .

1 голос
/ 20 сентября 2010
if rhyme =~ /(\d\.\d)/
    version = $1
end

Регулярному выражению соответствует цифра, за которой следует точка, а затем другая цифра.Скобка фиксирует его содержание.Поскольку это первая пара круглых скобок, она отображается на $1.

...