3

これらの派手な二重引用符'“'を含むテキストがあり、Rubygsubと正規表現を使用して通常の二重引用符に置き換えたいと思います。これが例と私がこれまでに持っているものです:

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!”' 
4

1 に答える 1

9

irbバックスラッシュは、ステートメントの結果を出力する方法のためにのみ表示されます。代わりに、gsubed文字列をなどの別のメソッドに渡すと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ことを=> nil示していることにも注意してください。putsnil

おかしな引用符がまだ出力の最後にあることに気付いたかもしれませんputs:これは、引用符が2つの異なるエスケープシーケンスであり、1つだけ名前を付けたためです。しかし、次の正規表現でそれを処理できます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 
于 2010-05-26T03:25:09.610 に答える