2010-09-30 68 views
0

假設我有一個類似「abc | xyz」的字符串,並且我想僅使用正則表達式替換將其轉換爲「xyz | abc」。 (在這個例子中可能有更好的方法,但這是一個替身的東西多毛。)用於重新排列字符串的Ruby's gsub

下面的代碼並沒有做什麼,我希望:

x = "abc | xyz" 
x = x.gsub(/^([^\|\s]*)\s*\|\s*(\S*)/, "\2 | \1") 
puts x 

是很明顯就是我」米做錯了嗎?謝謝!

回答

4

您需要轉義替換字符串中的反斜槓。例如,

x = "abc | xyz" 
x = x.gsub(/^([^\|\s]*)\s*\|\s*(\S*)/, "\\2 | \\1") 
puts x 

或只是

x = "abc | xyz" 
x = x.gsub(/^([^\|\s]*)\s*\|\s*(\S*)/, '\2 | \1') 
puts x 

和獎勵積分,一個簡單的正則表達式:

x = "abc | xyz" 
x = x.gsub(/(.*) \| (.*)/, '\2 | \1') 
puts x 
+0

哈,現在非常有意義。非常感謝! – dreeves 2010-09-30 22:13:51

4

而且總是有這樣做的方法不止一種..

"abc | xyz".split(' | ').reverse.join(' | ') 
+0

請不要這麼說 - Perl人將要起訴商標侵權! :) – 2010-10-01 00:11:03

+1

個人而言,我更喜歡看到它比用正則表達式完成。 – 2010-10-01 00:28:03

+0

被授予,原始問題表明真正的需求是複雜得多......但這確實說明了ruby如何以不同的方式處理問題。 – DGM 2010-10-01 04:06:23