来自遵循此格式的输入:
rgb(49, 49, 50) or rgb(30,30,40)
如何获得一个只包含用逗号分隔的数字的字符串,例如:
49,49,50
在Ruby中?我担心有时候逗号之后可能会有空格。我该如何处理?
答案 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"
R
,G
和B
将位于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"