2014-02-13 16 views

回答

3

編輯

width, height = mytext.match(/(\d+)\s*x\s*(\d+)\s*pixels/).captures 

width # 480 
height # 800 

說明

String#match會返回一個MatchData對象。如果我們把它轉換成一個數組,我們可以看到發生了什麼事情更好一點

mytext.match(/(\d+)\s*x\s*(\d+)\s*pixels/i).to_a 
# => ["480 x 800 pixels", "480", "800"] 

mytext.match(/(\d+)\s*x\s*(\d+)\s*pixels/i).captures 
# => ["480", "800"] 

注意

  • 我們真正關心的是MatchData[1],並且MatchData[2],方便,MatchData#captures包括所有捕獲沒有MatchData[0]

  • 我用\s*這樣就可以有可選的空格。這將匹配其他值包括:

    • 480x800 pixels
    • 480 x800pixels
    • 480 x 800 pixels

     

  • 我也i改性劑添加到正則表達式,使其不區分大小寫。這支持像值:

    • 480 x 800 Pixles
    • 480 X 800 PIXELS

原帖

這可以幫助你

width, height = mytext.scan /\d+/ 

puts width # 400 
puts height # 800 

說明

String#scan將掃描的模式的字符串,返回所有匹配的數組

scan = mytext.scan /\d+/ 
#=> ["480", "800", "4", "0", "233"] 

那麼接下來我們就搶前兩個瓦爾

width, height = scan 

Thi s是隻是

width = scan[0] 
height = scan[1] 

無論哪種方式的快捷方式,

width # 480 
height # 800 
+0

感謝naomik。我真的想確保它也遵循這種模式。 \ d + x \ d +,因爲在某些字符串中,我會將順序顛倒爲「4.0英寸480 x 800像素」。 –

+0

@HommerSmith,我做了一些額外的編輯。我希望他們能幫助你。 – naomik

0

您在第二個使用myext聲明而不是myext。這可能會導致正則表達式失敗。

+0

我相信這應該已經指出的錯字,沒有回答的評論。 –

+1

我發佈它作爲答案,因爲它可能是正則表達式工作不正常的原因。否則,如果它更微不足道,我完全同意。 –

0

假設你想要的數字,我會做:

values = /(\d+)\sx\s(\d+)\spixels/.match(mytext) 
width=values[1] 
height=values[2]