1

我有一个类似于以下的字符串:

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."
4

2 回答 2

2

YAML 将空行(两个连续的换行符)视为等同于 \n。来自http://yaml.org/spec/history/2001-08-01.html

遇到了同样的问题,终于找到了解决方案: s.replaceAll("\n", " \n\n ");

于 2013-11-11T16:45:31.670 回答
1

这个字符串是从哪里来的?如果那是真正的 Ruby 代码,那么字符串将包含换行字符对,而不是两个字符\n

内部双引号\n被转换为单个换行符,因此与行尾的换行符一起,每行后面都有两个。但是to_yaml看到一个反斜杠(它用第二个反斜杠转义),然后是一个n逐字传递的反斜杠。

在 YAML 中没有唯一的方式来表示字符串。String#to_yaml(或YAML.dump)生成字符串数据的单引号流样式,除非数据包含必须用双引号表示的字符。换行符由 YAML 数据中的空行表示。

这个简短的程序演示。

require 'yaml'

puts "aa\nbb\n".to_yaml

输出

--- ! 'aa

  bb

'
于 2013-08-17T03:53:17.547 回答