我將如何找到一個像這樣的字符串的寬度和高度像素:在Ruby中查找字符串中的值(整數)?
mytext = "480 x 800 pixels, 4.0 inches (~233 ppi pixel density)"
我已經試過這樣:
mytext[/(\d+)\sx\s(\d+)\spixels/]
但不工作
我將如何找到一個像這樣的字符串的寬度和高度像素:在Ruby中查找字符串中的值(整數)?
mytext = "480 x 800 pixels, 4.0 inches (~233 ppi pixel density)"
我已經試過這樣:
mytext[/(\d+)\sx\s(\d+)\spixels/]
但不工作
編輯
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
您在第二個使用myext
聲明而不是myext
。這可能會導致正則表達式失敗。
我相信這應該已經指出的錯字,沒有回答的評論。 –
我發佈它作爲答案,因爲它可能是正則表達式工作不正常的原因。否則,如果它更微不足道,我完全同意。 –
假設你想要的數字,我會做:
values = /(\d+)\sx\s(\d+)\spixels/.match(mytext)
width=values[1]
height=values[2]
感謝naomik。我真的想確保它也遵循這種模式。 \ d + x \ d +,因爲在某些字符串中,我會將順序顛倒爲「4.0英寸480 x 800像素」。 –
@HommerSmith,我做了一些額外的編輯。我希望他們能幫助你。 – naomik