如何在字符串中找到像这样的宽度和高度像素:
mytext = "480 x 800 pixels, 4.0 inches (~233 ppi pixel density)"
我试过这个:
mytext[/(\d+)\sx\s(\d+)\spixels/]
但是不起作用
答案 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]