我遇到了一個我無法解決的問題。我已經從網頁中提取了一行到一個變量。讓說的論據的緣故,這是:如何模式匹配字符串中的字符串,然後將其提取到變量中
韻=「三隻瞎老鼠6.0版」
,我希望能夠首先找到該字符串(6.0),其次內部版本號提取此數到另一個單獨的變量 - (我想具體提取不超過「6.0」)
我希望我澄清了這一點,如果沒有請問我任何你需要知道,我會盡快回復你。
我遇到了一個我無法解決的問題。我已經從網頁中提取了一行到一個變量。讓說的論據的緣故,這是:如何模式匹配字符串中的字符串,然後將其提取到變量中
韻=「三隻瞎老鼠6.0版」
,我希望能夠首先找到該字符串(6.0),其次內部版本號提取此數到另一個單獨的變量 - (我想具體提取不超過「6.0」)
我希望我澄清了這一點,如果沒有請問我任何你需要知道,我會盡快回復你。
首先,您需要確定版本號的模式應該是什麼樣的。一種可能性是\d+(\.\d+)*$
(在字符串的末尾有一個數字後跟零個或多個(點後跟一個數字))。
然後你可以使用String#[]
得到匹配模式的子字符串:您需要使用正則表達式
rhyme[ /\d+(\.\d+)*$/ ] #=> "6.0"
你的正則表達式錯過了6.它應該是/(\d+\.\d+)/。 – Gerhard 2010-09-20 10:44:10
@Gerhard:不。我的正則表達式按原樣運行。如果你用irb運行我的代碼,你會發現它確實像我說的那樣返回「6.0」。也不像你提出的正則表達式,我的也會匹配「6」或「6.0.0」。 – sepp2k 2010-09-20 10:48:18
@Gerhard:爲了使它與'scan'一起工作,你需要使組不捕獲(並且當然移除錨)。像這樣:'「1.0 2.0.0 3」.scan(/ \ d +(?:\。\ d +)* /)#=> [「1.0」,「2.0.0」,「3」]' – sepp2k 2010-09-20 10:52:43
if rhyme =~ /(\d\.\d)/
version = $1
end
正則表達式匹配一個數字,後跟一個句點,後跟另一個數字。圓括號捕捉其內容。由於它是第一對括號,因此它被映射到$1
。
看起來像Perl。 – 2010-09-20 10:58:08
你想如何找到版本號?它總是唯一的數字嗎?它是否總是在「版本」之後?它總是在最後?版本號的可能格式是什麼 - 是否總是有小數點?可以有多少個數字或一組數字? – 2010-09-20 10:55:25