Ruby YAML:分析带有转义双引号的字符串时出错

Ruby YAML:分析带有转义双引号的字符串时出错,ruby,string,parsing,escaping,yaml,Ruby,String,Parsing,Escaping,Yaml,在Ruby2.0中,使用Psych的Yaml似乎很难避开双引号。有人有办法解决这个问题吗 data_ =<<END_ description: "Acme acquires ILM: Lucas says \"Inevitable!\"" END_ ap YAML.load(data_) 在理想情况下,条目将包含正确的unicode打印引号,但我无法控制这些引号(尽管我可以在使用YAML处理之前替换它们) 有没有关于让YAML正确解析的想法 更新:回答我的问题。发现可以通过复制单

在Ruby2.0中,使用Psych的Yaml似乎很难避开双引号。有人有办法解决这个问题吗

data_ =<<END_
description: "Acme acquires ILM: Lucas says \"Inevitable!\""
END_

ap YAML.load(data_)
在理想情况下,条目将包含正确的unicode打印引号,但我无法控制这些引号(尽管我可以在使用YAML处理之前替换它们)

有没有关于让YAML正确解析的想法

更新:回答我的问题。发现可以通过复制单个引号来逃避引用,因此这是可行的:

description: 'Acme acquires ILM: Lucas says "It''s Inevitable!"'

我通过使用YAML.dump(所需的字符串)发现了这一点。

您的问题是,就转义而言,herdeocs的行为类似于双引号字符串。这意味着herdoc中的
\“
在字符串中只作为
结束。注意:

>> data_ =<<END_
description: "Acme acquires ILM: Lucas says \"Inevitable!\""
END_
>> puts data_
description: "Acme acquires ILM: Lucas says "Inevitable!""
或者,使用
%q{…}
引用字符串,使其行为更像一个引用的字符串:

data_ = %q{
description: "Acme acquires ILM: Lucas says \"Inevitable!\""
}

我可能会将您想要的结构构建为Ruby对象,然后
to_yaml
it来获取字符串,这样就不用担心引用废话了。
>> data_ =<<END_
description: "Acme acquires ILM: Lucas says \"Inevitable!\""
END_
>> puts data_
description: "Acme acquires ILM: Lucas says "Inevitable!""
data_ =<<END_
description: "Acme acquires ILM: Lucas says \\"Inevitable!\\""
END_
data_ = %q{
description: "Acme acquires ILM: Lucas says \"Inevitable!\""
}