1

是)我有的

"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("/")

当然,它有效。但我很好奇是否还有其他更好的方法可以做到这一点。

4

3 回答 3

2
a.gsub(/(?<=^|\/)/, "my_namespace:")
# => "my_namespace:path1/my_namespace:path2/my_namespace:path3"
于 2012-11-10T12:44:56.963 回答
1

似乎是一个很好的用例String#gsub

a = "path1/path2/path3".gsub(%r{[^/]+/?}) { |m| "mynamespace:#{m}" }
p a #=> "mynamespace:path1/mynamespace:path2/mynamespace:path3"
于 2012-11-10T12:36:56.627 回答
0

也许您的路径意味着不同的名称空间。如果是这样,那么您可以使用 zip

"path1/path2/path3".split('/').zip(['namespace1','namespace2','namespace3']).
  map { |p,n| n + ':' + p }.join('/')

=> "namespace1:path1/namespace2:path2/namespace3:path3"
于 2012-11-10T12:43:04.130 回答