從下面這個格式的輸入:獲取RGB值出像RGB串(49,49,50)
rgb(49, 49, 50) or rgb(30,30,40)
我怎樣才能將只包含由逗號分隔的數字字符串,例如as:
49,49,50
在Ruby中?我擔心有時在逗號後面可能會有空格。我該如何處理?
從下面這個格式的輸入:獲取RGB值出像RGB串(49,49,50)
rgb(49, 49, 50) or rgb(30,30,40)
我怎樣才能將只包含由逗號分隔的數字字符串,例如as:
49,49,50
在Ruby中?我擔心有時在逗號後面可能會有空格。我該如何處理?
掃描是你的朋友:
"rgb(12,23,34)".scan(/\d+/).join(',') # => "12,23,34"
尼斯和甜蜜。
像這樣(忽略所有的空格內rgb()
:
if "rgb(49, 49, 50)" =~ /rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/
[$1, $2, $3].join ","
end
#=> "49,49,50"
R
,G
和B
將在匹配組1至3,可訪問經由$1
,$2
,$3
或返回的結果Try it out on Rubular
更新:這個解決方案和在這裏使用scan
的區別在於,這個如果輸入不正確,則驗證輸入並且不匹配。與scan
解決方案相比,它的打字速度可能要慢一些,而且要更長一些。因此,如果先驗知道輸入有效,那麼解決方案將是更好的選擇。
你可以試試這個:
new_str = "rgb(49, 49, 50)".sub(/rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/, '\1,\2,\3')
很快,你可以做這樣的事情:
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
使用scan
可以返回所有匹配的數組。在這種情況下,\d+
匹配一個或多個數字。這將返回一個數組['12','23','34']
。然後你可以用逗號加入元素。
"rgb(12,23,34)".scan(/\d+/).join(",")
#=> "12,23,34"
只是爲了多種,刪除字符你不想:
"rgb(49, 49 , 50)".gsub(/[rgb() ]/, '')
=> "49,49,50"