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")