Unescaping Ruby字符串中的特殊字符序列

我正在从包含如下序列的文件中加载文本:

abc\ndef\tghi 

我想’unescape’所有特殊字符,例如将\n视为换行符和\t作为制表符等,而不是自动以字符串中的\\n\\t结尾。

是否有捷径可寻?

文本将完全按照文件中的方式加载。 如果文件具有文字文本\和n而不是换行符,则将加载该文件。 如果您想要更改一组已知的转义gsub ,则可以简单地对它们进行gsub

 line='abc\ndef\tghi' line.gsub!('\n', "\n") line.gsub!('\t', "\t") 

我觉得应该有一些更优雅的方法来做到这一点,但你可以编写通用方法来进行交换:

 def unescape(string) dup = string.dup escaped_chars = ['n', 't', 'r', 'f', 'v', '0', 'a'] escaped_subs = { "n" => "\n", "t" => "\t", "r" => "\r", "f" => "\f", "v" => "\v", "0" => "\0", "a" => "\a" } pos = 0 while pos < dup.length if dup[pos] == '\\' and escaped_chars.include? dup[pos + 1] dup[pos..(pos + 1)] = escaped_subs[dup[pos + 1]] end pos += 1 end return dup end 

YAML.unescape怎么样?

 require 'syck/encoding' require 'yaml' YAML.unescape("\\n")