2010-05-26 171 views
3

我有这些花哨的双引号的文本:''',我想用普通的双引号替换它们,使用Ruby gsub和regex。下面是一个例子,我有什么至今:使用Ruby正则表达式转换为'''正则表达式使用Ruby正则表达式

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

回答

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输出后,我们可以看到表明调用puts返回nil=> 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