0

从遵循此格式的输入:

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

我怎样才能得到一个只包含用逗号分隔的数字的字符串,例如:

49,49,50

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

4

6 回答 6

3

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

"rgb(12,23,34)".scan(/\d+/).join(",")
#=> "12,23,34" 
于 2013-10-24T22:21:02.083 回答
3

扫描是你的朋友:

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

又好又甜。

于 2013-10-24T22:32:20.600 回答
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"

R,G并将位于匹配组 1 到 3 中,B可通过$1、或返回的结果访问。在 Rubular 上尝试一下$2$3

更新:此解决方案与此处使用的解决方案之间的区别在于,此解决方案scan验证输入并且如果输入不正确则不匹配。打字可能比scan解决方案慢一点,时间长一点。因此scan,当先验知道输入有效时,解决方案将是更好的选择。

于 2013-10-24T22:12:03.777 回答
0

你可以试试这个:

new_str = "rgb(49, 49, 50)".sub(/rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/, '\1,\2,\3')
于 2013-10-24T22:19:54.573 回答
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
于 2013-10-24T22:20:56.017 回答
0

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

"rgb(49, 49 , 50)".gsub(/[rgb() ]/, '')
=> "49,49,50"
于 2013-10-24T22:44:47.057 回答