我遇到了一个我无法解决的问题。我已经从网页中提取了一行到变量中。为了论证,我们可以说:
押韵=“三只盲老鼠版本6.0”
我希望能够首先找到此字符串中的版本号(6.0),然后将此数字提取到另一个单独的变量中 - (我想特别提取不超过“6.0”)
我希望我已经澄清了这一点,如果没有,请问我需要知道的任何事情,我会尽快回复你。
答案 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
。