我正在使用一个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。
答案 0 :(得分:2)
在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: |-
\\\|
|
启动文字块标量,-
导致最后的换行符(在下一项之前)不属于标量,这是您想要的。