2013-07-09 110 views
1

我有一個字符串「共享/錯誤」,我想爲單詞「錯誤」前置一個下劃線,以實現「共享/ _errors」是否有一些紅寶石魔法爲了做到這一點?分割和修改最後

+5

'string ='shared/_errors''怎麼樣? – Borodin

+1

如何向我們展示您編寫的代碼以及您正在實現的問題?請參閱http://sscce.org/瞭解如何正確地向我們提供我們需要的信息以幫助您。 –

回答

2

假設只存在串在一個單一的斜線,所有必要的是

string.sub!(%r|(?<=/)|, '_') 

,或者,如果你願意,

string.sub!('/', '/_') 

如果有AR在字符串中的E倍數斜線,你只希望影響最後一個,那麼你要

string.sub!(%r|(?=[^/]*\z)|, '_') 
+0

最後一個例子中的正則表達式是什麼? –

0

爲什麼不

path = 'shared/errors' # or whatever it is 
dir, file = path.match(/^(.*\/)([^/]*)$/).captures 
path = dir + "_" + file 

這將讓該字符串的兩個部分:

shared/errors ==> shared/ + errors 

然後修補他們重新走到一起,形成所需的字符串。

1

如果你只是想做到這一點的向前最後一次出現大幅削減,你可以斜線的索引位置插入一個下劃線:

string.insert(string.rindex('/') + 1, '_') 
+1

+1美麗,簡單的解決方案。 Ruby編程應該是這樣的:) – feralin

+0

你在想Python嗎? Ruby沒有'rfind'。使用'rindex'來代替,下劃線會出錯。 –

+0

確實是一個錯字,謝謝Darshan。 – Matt

1

或許所有的答案都是有效的這裏,但我沒有看到OP引用的「錯誤」的名字。而不是斜線。

string.gsub!('error', '_error')應更改原始字符串,並對字符串中可能發生的所有事件進行更改。當然,我有一種感覺,斜線很重要,所以也許更正確的string.gsub!('/error', '/_error')會做得更好。