我有一个类似于以下内容的字符串:
test_string = "This is a multiple line string \n
containing new line characters. \n
Another new line."
我正在尝试使用to_yaml函数将其转换为多行yaml字符串,但它会自动转义新行字符。
test_string.to_yaml
输出:
=> "--- ! This is a multiple line string \\ncontaining new line characters.
\\nAnother new line."
如何创建包含"\n"
的字符串并将其解析为yaml?
编辑: 事实证明,如果在“\ n”之前放置一个空格,to_yaml函数将转义新行。以下字符串解决了问题:
test_string = "This is a multiple line string\n
containing new line characters.\n
Another new line."
答案 0 :(得分:2)
YAML将空行(两个连续换行符)视为等于\ n。 来自http://yaml.org/spec/history/2001-08-01.html
有同样的问题,终于找到解决方案: s.replaceAll(“\ n”,“ \ n \ n ”);
答案 1 :(得分:0)
这个字符串来自哪里?如果那是真正的Ruby代码,那么字符串将包含成对的换行符,而不是两个字符\n
。
内部双引号\n
被转换为单个换行符,因此与行末尾的换行符一起,每行后将有两个换行符。但是to_yaml
会看到一个反斜杠(它会以第二个反斜杠转义),然后是n
,它会逐字传递。
在YAML中没有一种表示字符串的独特方式。 String#to_yaml
(或YAML.dump
)生成字符串数据的单引号流样式,除非数据包含必须用双引号表示的字符。换行符由YAML数据中的空行表示。
这个简短的节目演示了。
require 'yaml'
puts "aa\nbb\n".to_yaml
<强>输出强>
--- ! 'aa
bb
'