为了账号安全,请及时绑定邮箱和手机立即绑定

如何获得 r'\\\|' 来自 yaml 文件

如何获得 r'\\\|' 来自 yaml 文件

回首忆惘然 2021-06-01 13:40:05
我正在使用 yaml 文件来存储一些配置数据,包括一些(许多)我不想保留在代码中的正则表达式字符串。一切正常,除非我尝试使用r'\\\|'. 我在 yaml 中尝试了带引号、不带引号和文字的字符串,但没有任何效果。Yaml 和 Python 字符串转义规则似乎合谋使字符串中的反斜杠数量保持均匀。我打开并加载文件f=open(file_path, 'r', encoding='utf_8') python_dict = yaml.load(f)我想重现re.compile('\\\|')使用类似的东西re.compile(python_dict['escaped-pipes'])带有 PyYAML 的 Python 3.4。
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

在 YAML 中,\仅在双引号字符串中是特殊字符。Python 字符串r'\\\|'是原始字符串,因此它由三个反斜杠和一个管道组成。您可以使用以下选项将其编码到 YAML 文档中:


plain:  \\\|      # plain scalar. YAML does not process the backslashes.

single: '\\\|'    # single quoted scalar. YAML also does not process the backslashes.

double: "\\\\\\|" # double quoted scalar. YAML does process escape sequences here, so you

                  # need to double the backslashes

单引号标量类似于 Python 原始字符串的 YAML。


您的正则表达式中可能包含其他可能干扰 YAML 语法的字符。您可能希望改用块标量,它将所有字符视为内容并通过缩进结束:


block: |-

  \\\|

next block: |-

  \\\|

|开始一个文字块 scalar,-导致最后的换行符(在下一项之前)不是标量的一部分,这就是你想要的。


查看完整回答
反对 回复 2021-06-22
  • 1 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信