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

标签 ruby regex gsub

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

最佳答案

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

关于ruby - 使用 Ruby 正则表达式用常规双引号转义 '“',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2909924/

相关文章:

R 返回第一个下划线后的所有字符

ruby - 正则表达式在里面获取文本

ruby-on-rails - 如何将特定的 gem 版本设置为默认版本?

Ruby,检查字符串是否都是有效的十六进制字符?

java - 使用 RegEx 匹配大输入时出现 StackOverflowError

c# - 如果字符串长度为 2 且包含 1 个字母和 1 个数字,则正则表达式匹配

ruby - 关于使用 gsub 有什么建议吗?在 irb 控制台中工作正常,但不会在实际文件中查找/替换

ruby-on-rails - 设计:尝试创建没有 ID 的记录

ruby-on-rails - Gem install ffi 无法构建 gem native 扩展

regex - 使用 iname 在 Linux Find 命令中匹配 RegExp