在Ruby中查找字符串中的值(整数)?

时间:2014-02-13 03:59:29

标签: ruby

如何在字符串中找到像这样的宽度和高度像素:

mytext = "480 x 800 pixels, 4.0 inches (~233 ppi pixel density)"

我试过这个:

mytext[/(\d+)\sx\s(\d+)\spixels/]

但是不起作用

3 个答案:

答案 0 :(得分: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修饰符添加到regexp以使其不区分大小写。这支持的值如下:

    • 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

这只是

的捷径
width = scan[0]
height = scan[1]

无论哪种方式,

width  # 480
height # 800

答案 1 :(得分:0)

您在第二个语句中使用了myext而不是myext。这可能会导致正则表达式失败。

答案 2 :(得分:0)

假设你想要数字,我会这样做:

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