2010-05-26 140 views
3

我有這些花哨的雙引號的文本:''',我想用普通的雙引號替換它們,使用Ruby gsub和regex。下面是一個例子,我有什麼至今:使用Ruby正則表達式轉換爲'''正則表達式使用Ruby正則表達式

sentence = 'This is a quote, 「Hey guys!」' 

I couldn't figure out how to escape double quotes so I tried using 34.chr: 
sentence.gsub("「",34.chr). This gets me close but leaves a back slash in front of the double quote: 

sentence.gsub("「",34.chr) => 'This is a quote, \"Hey guys!」' 

回答

9

反斜槓只顯示irb了由於它的方式打印出一個語句的結果。如果您將gsub ed字符串傳遞給其他方法(如puts),那麼在轉換轉換序列後,您會看到「真實」表示。

1.9.0 > sentence = 'This is a quote, 「Hey guys!」' 
=> "This is a quote, \342\200\234Hey guys!\342\200\235" 
1.9.0 > sentence.gsub('「', "'") 
=> "This is a quote, 'Hey guys!\342\200\235" 
1.9.0 > puts sentence.gsub('「', "'") 
This is a quote, 'Hey guys!」 
=> nil 

還要注意的puts輸出後,我們可以看到表明調用puts返回nil=> nil

您可能已經注意到,有趣的引用仍然在輸出結尾puts:這是因爲引號是兩個不同的轉義序列,而我們只命名了一個。但是,我們可以在gsub照顧,與一個正則表達式:

1.9.0 > puts sentence.gsub(/(「|」)/, 34.chr) 
This is a quote, "Hey guys!" 
=> nil 

而且,在很多情況下,你可以在Ruby字符串換單引號和雙引號 - 雙引號進行擴張,而單引號不會。這裏有幾種方法可以得到只包含雙引號的字符串:

1.9.0 > '"' == 34.chr 
=> true 
1.9.0 > %q{"} == 34.chr 
=> true 
1.9.0 > "\"" == 34.chr 
=> true 
相關問題