2013-10-24 175 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"