我有什么
"path1/path2/path3"
我想要什么
"my_namespace:path1/my_namespace:path2/my_namespace:path3"
我做了:
a = "path1/path2/path3"
b = a.split("/").map{ |item| "my_namespace:"+ item}
puts b.join("/")
当然,它有效。但我很好奇是否还有其他更好的办法。
答案 0 :(得分:2)
a.gsub(/(?<=^|\/)/, "my_namespace:")
# => "my_namespace:path1/my_namespace:path2/my_namespace:path3"
答案 1 :(得分:1)
似乎是String#gsub
的一个很好的用例:
a = "path1/path2/path3".gsub(%r{[^/]+/?}) { |m| "mynamespace:#{m}" }
p a #=> "mynamespace:path1/mynamespace:path2/mynamespace:path3"
答案 2 :(得分:0)
也许你的路径有不同的命名空间。如果是这样,那么你可以使用zip
"path1/path2/path3".split('/').zip(['namespace1','namespace2','namespace3']).
map { |p,n| n + ':' + p }.join('/')
=> "namespace1:path1/namespace2:path2/namespace3:path3"