在Ruby字符串中取消特殊字符序列

在Ruby字符串中取消特殊字符序列,ruby,string,Ruby,String,我正在从包含以下序列的文件加载文本: abc\ndef\tghi 我想“取消扫描”所有特殊字符,例如将\n视为换行符,将\t视为选项卡等,而不是自动以字符串中的\\n或\\t结尾 有没有一种简单的方法可以做到这一点?文本将完全按照文件中的方式加载。如果文件具有文本文本\和n而不是换行符,则将加载该文本。如果您想更改一组已知的转义,只需gsub即可 line='abc\ndef\tghi' line.gsub!('\n', "\n") line.gsub!('\t', "\t") 我觉得应该有

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

abc\ndef\tghi
我想“取消扫描”所有特殊字符,例如将
\n
视为换行符,将
\t
视为选项卡等,而不是自动以字符串中的
\\n
\\t
结尾


有没有一种简单的方法可以做到这一点?

文本将完全按照文件中的方式加载。如果文件具有文本文本\和n而不是换行符,则将加载该文本。如果您想更改一组已知的转义,只需
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
def unescape(字符串)
dup=string.dup
转义字符=['n','t','r','f','v','0','a']
转义\u subs={
“n”=>“\n”,
“t”=>“\t”,
“r”=>“\r”,
“f”=>“\f”,
“v”=>“\v”,
"0" => "\0",
“a”=>“\a”
}
pos=0
而pos
YAML.unescape怎么样

require 'syck/encoding'
require 'yaml'

YAML.unescape("\\n")

我担心会有这样的答案:-)它让开发人员有责任找到并替换每个已知的逃逸集。如果有一个像String#unescape这样的方法来做这项工作会很好。Matt,请看我对Telemachus的回答的评论。在你和Matt的回答之间,这是一个艰难的选择。哪个表现更好?我有一种感觉,从长远来看,你的是一个更好的字符串类的补充,但为了快速和肮脏,我会选择马特的答案。@mydoghasworms足够公平。我很快就把它放在了一起,以回应您的评论,即“开发人员有责任查找和替换每个已知的转义集”。这样的话,你只需要把这一切都解决一次。也就是说,对于99%的病例来说,这可能是杀伤力过高。