从字符串中获取rgb值,如rgb(49,49,50)

时间:2013-10-24 22:06:22

标签: ruby regex

来自遵循此格式的输入:

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

如何获得一个只包含用逗号分隔的数字的字符串,例如:

49,49,50

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

6 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

扫描是你的朋友:

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

很好,很甜蜜。

答案 2 :(得分: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解决方案慢一点,也可能更长。因此scan解决方案是一个更好的选择,如果先验已知输入有效。

答案 3 :(得分:0)

你可以试试这个:

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

答案 4 :(得分: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

答案 5 :(得分:0)

只是为了变化,删除你不想要的字符:

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