我的文字有这些花哨的双引号:'''我想用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!”'
答案 0 :(得分: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
输出后,我们看到=> nil
表示对puts
的调用已返回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