使用Ruby正则表达式使用常规双引号转义'"'

Dav*_*dP6 3 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 back slash in front of the double quote:

sentence.gsub("“",34.chr) => 'This is a quote, \"Hey guys!”' 
Run Code Online (Sandbox Code Playgroud)

Mar*_*off 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
Run Code Online (Sandbox Code Playgroud)

还要注意,输出之后puts,我们看到=> nil指示返回的调用putsnil.

您可能已经注意到有趣的引用仍然在输出的末尾puts:这是因为引号是两个不同的转义序列,我们只命名一个.但我们可以用正则表达式处理gsub:

1.9.0 > puts sentence.gsub(/(“|”)/, 34.chr)
This is a quote, "Hey guys!"
 => nil
Run Code Online (Sandbox Code Playgroud)

此外,在许多情况下,您可以在Ruby字符串中交换单引号和双引号 - 双引号执行扩展而单引号则不执行扩展.以下几种方法可以获得仅包含双引号的字符串:

1.9.0 > '"' == 34.chr
 => true 
1.9.0 > %q{"} == 34.chr
 => true 
1.9.0 > "\"" == 34.chr
 => true 
Run Code Online (Sandbox Code Playgroud)