2013-10-24 34 views
0

从下面这个格式的输入:获取RGB值出像RGB串(49,49,50)

rgb(49, 49, 50) or rgb(30,30,40) 

我怎样才能将只包含由逗号分隔的数字字符串,例如as:

49,49,50 

在Ruby中?我担心有时在逗号后面可能会有空格。我该如何处理?

回答

3

扫描是你的朋友:

"rgb(12,23,34)".scan(/\d+/).join(',') # => "12,23,34" 

尼斯和甜蜜。

1

像这样(忽略所有的空格内rgb()

if "rgb(49, 49, 50)" =~ /rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/ 
    [$1, $2, $3].join "," 
end 
#=> "49,49,50" 

RGB将在匹配组1至3,可访问经由$1$2$3或返回的结果Try it out on Rubular

更新:这个解决方案和在这里使用scan的区别在于,这个如果输入不正确,则验证输入并且不匹配。与scan解决方案相比,它的打字速度可能要慢一些,而且要更长一些。因此,如果先验知道输入有效,那么解决方案将是更好的选择。

0

你可以试试这个:

new_str = "rgb(49, 49, 50)".sub(/rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/, '\1,\2,\3') 
0

很快,你可以做这样的事情:

s1 = "rgb(30,30,40)" 
s2 = "rgb(30, 30, 40)" 

r = /rgb\((\d{1,3}),\s?(\d{1,3}),\s?(\d{1,3})\)/ 

m = r.match(s1) 
puts "#{m[1]},#{m[2]},#{m[3]}" => 30,30,40 

m = r.match(s2) 
puts "#{m[1]},#{m[2]},#{m[3]}" => 30,30,40 
3

使用scan可以返回所有匹配的数组。在这种情况下,\d+匹配一个或多个数字。这将返回一个数组['12','23','34']。然后你可以用逗号加入元素。

"rgb(12,23,34)".scan(/\d+/).join(",") 
#=> "12,23,34" 
0

只是为了多种,删除字符你不想:

"rgb(49, 49 , 50)".gsub(/[rgb() ]/, '') 
=> "49,49,50"