从下面这个格式的输入:获取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"