如何模式匹配字符串中的字符串,然后将其提取到变量中

时间:2010-09-20 09:53:00

标签: ruby pattern-matching

我遇到了一个我无法解决的问题。我已经从网页中提取了一行到变量中。为了论证,我们可以说:

押韵=“三只盲老鼠版本6.0”

我希望能够首先找到此字符串中的版本号(6.0),然后将此数字提取到另一个单独的变量中 - (我想特别提取不超过“6.0”)

我希望我已经澄清了这一点,如果没有,请问我需要知道的任何事情,我会尽快回复你。

3 个答案:

答案 0 :(得分:5)

首先,您需要确定版本号的模式应该是什么。一种可能性是\d+(\.\d+)*$(字符串末尾的数字后跟零或更多(点后跟数字))。

然后您可以使用String#[]来获取与模式匹配的子字符串:

rhyme[ /\d+(\.\d+)*$/ ] #=> "6.0"

答案 1 :(得分:2)

您需要使用正则表达式。我会使用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

如果可以信任输入只产生一个匹配,或者如果您总是要使用第一个匹配,则可以使用此answer中的解决方案。

修改:我们的讨论结束后再进行answer

答案 2 :(得分:1)

if rhyme =~ /(\d\.\d)/
    version = $1
end

正则表达式匹配一个数字,后跟一个句点,然后是另一个数字。括号内容包含其内容。由于它是第一对括号,因此它映射到$1