3

我有带有这些花哨双引号的文本:'“',我想使用 Ruby gsub 和正则表达式将它们替换为常规双引号。这是一个示例,以及到目前为止我所拥有的:

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:这是因为引号是两个不同的转义序列,我们只命名了一个。但是我们可以用一个正则表达式来解决这个问题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 回答