【问题标题】:Is there a way to represent a long string that doesnt have any whitespace on multiple lines in a YAML document?有没有办法表示在 YAML 文档中的多行上没有任何空格的长字符串?
【发布时间】:2011-09-10 05:40:02
【问题描述】:

假设我有以下字符串:

"abcdefghijklmnopqrstuvwxyz"

而且我认为我的 YAML 文件中的一行太长了,有什么方法可以将它分成几行吗?

>-
    abcdefghi
    jklmnopqr
    stuvwxyz

将导致"abcdefghi jklmnopqr stuvwxyz" 很接近,但不应包含任何空格。

【问题讨论】:

    标签: string yaml


    【解决方案1】:

    使用双引号,并转义换行符:

    "abcdefghi\
    jklmnopqr\
    stuvwxyz"
    

    【讨论】:

    • 单引号似乎也可以工作,并且所有缩进(甚至不相等的缩进)似乎都被剥离了。谢谢!
    • 我在 puppet "Hiera" 中将它用于 YAML 并且单引号不起作用,因为它们至少不将 \ 作为 RUBY YAML 中的转义字符。尚未使用其他 YAML 解析器对其进行测试。
    • 请参阅this other StackOverflow answer,以全面了解 YAML 中所有不同的包装样式。
    • 单引号不应该这样。来自规范:it is only possible to break a long single-quoted line where a space character is surrounded by non-spaces.
    • 对于某些python API操作,使用单引号会在字符串的断点处添加一个空格,但是双引号可以正常工作...谢谢:)
    【解决方案2】:

    Jesse 的回答会遗漏一些细微之处。

    YAML(像许多编程语言一样)以不同的方式处理单引号和双引号。考虑这份文件:

    regexp: "\d{4}"
    

    这将无法解析,并出现如下错误:

    在第 1 行第 9 列解析带引号的标量时发现未知转义字符

    比较一下:

    regexp: '\d{4}'
    

    这将正确解析。为了在双引号字符串中使用反斜杠字符,您需要对它们进行转义,如:

    regexp: "\\d{4}"
    

    我还想强调一下 Steve 关于单引号字符串的评论。考虑这份文件:

    s1: "this\
      is\
      a\
      test"
    
    s2: 'this\
      is\
      a\
      test'
    

    解析的时候你会发现它等价于:

    s1: thisisatest
    s2: "this\\ is\\ a\\ test"
    

    这是 YAML 将单引号字符串视为文字的直接结果,而双引号字符串受转义字符扩展的影响。

    【讨论】:

      猜你喜欢
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      相关资源
      最近更新 更多