python - 如何获取 r'\\\|'来自 yaml 文件

标签 python regex yaml pyyaml

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

最佳答案

在 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 标量,它将所有字符视为内容并通过缩进结束:

block: |-
  \\\|
next block: |-
  \\\|

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

关于python - 如何获取 r'\\\|'来自 yaml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425137/

相关文章:

python - Pandas 映射 2 dfs

python - Django JSONField isnull 查找

c# - 允许正则表达式中的双字节空间

rest - Swagger UI 3 中出现奇怪的 "Could not resolve reference: undefined Not Found"消息

python - 如何在Keras中为 'Tensor'对象赋值?

python - 使用 Python 的正则表达式 : findall inside a boundry

c# - 将多个连续的相等字符从一个字符串减少为一个

python - 如果我使用感叹号,为什么 yaml 文件的输出中会出现引号?

Jekyll 和嵌套列表的 YAML 前端内容

python - 自定义类对象和 "in"集合运算符