使用Ruby正则表达式使用常规双引号转义’“’

我的文字有这些花哨的双引号:”’我想用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字符串传递给另一个方法(如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表示puts的调用返回了nil

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