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

我正在使用 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。


回首忆惘然
浏览 119回答 1
1回答

慕容森

在 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,-导致最后的换行符(在下一项之前)不是标量的一部分,这就是你想要的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python