2012-11-10 57 views
1

我有什麼更改字符串的每個項目在Ruby中

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

當然,它的工作原理。但我很好奇,如果還有其他更好的方法來做到這一點。

回答

1

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

a = "path1/path2/path3".gsub(%r{[^/]+/?}) { |m| "mynamespace:#{m}" } 
p a #=> "mynamespace:path1/mynamespace:path2/mynamespace:path3" 
+0

在我的例子我用'路徑1 ... 2 ... 3'。但在真實應用程序中,我不使用這種模式。 –

+0

對不起,我在那裏太過分了。雖然有人可能會提供更好的正則表達式,但我認爲上述內容現在更接近您想要的內容,我對其進行了編輯。 –

+0

沒關係。但很難理解特別是這個正則表達式究竟是如何工作的。你能解釋一下嗎? –

0

也許你的意思是不同的命名空間爲你的路。如果是這樣,那麼你可以使用壓縮

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

=> "namespace1:path1/namespace2:path2/namespace3:path3" 
2
a.gsub(/(?<=^|\/)/, "my_namespace:") 
# => "my_namespace:path1/my_namespace:path2/my_namespace:path3" 
相關問題