【问题标题】:Escaping '“' with regular double quotes using Ruby regex使用 Ruby 正则表达式用常规双引号转义 '“'
【发布时间】:2011-02-23 23:50:20
【问题描述】:

我的文本包含这些花哨的双引号:'“',我想使用 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!”' 

【问题讨论】:

    标签: ruby regex gsub


    【解决方案1】:

    由于它打印语句结果的方式,反斜杠仅出现在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 表明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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多