逃逸'“';使用Ruby regex使用常规双引号

逃逸'“';使用Ruby regex使用常规双引号,ruby,regex,gsub,Ruby,Regex,Gsub,我的文本中有这些奇特的双引号:“”,我想用使用Ruby gsub和regex的常规双引号替换它们。下面是一个示例和我到目前为止的内容: 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 ba

我的文本中有这些奇特的双引号:“”,我想用使用Ruby gsub和regex的常规双引号替换它们。下面是一个示例和我到目前为止的内容:

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

反斜杠仅在
irb
中显示,因为它打印语句结果的方式。如果将
gsub
ed字符串传递给另一个方法,如
put
,则在转义序列转换后,您将看到“实”表示

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
还要注意的是,在输出
put
之后,我们看到
=>nil
指示对
put
的调用返回
nil

您可能注意到,
put
输出的末尾仍然有有趣的引号:这是因为引号是两个不同的转义序列,我们只命名了一个。但是我们可以在
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