python - 从 Yaml 文件中读取正则表达式字符串会使反斜杠加倍
问题描述
我正在尝试将正则表达式模式存储在 Yaml 文件中,如下所示:
---
Fidor:
Fidor Rechnungsabschluss kurz:
From: ^Rechnungsabschluss_(\d{2})_(\d{4})\.pdf
To: \\2_\\1_Rechnungsabschluss_Fidor.pdf
Fidor Rechnungsabschluss lang:
From: ^Rechnungsabschluss_(\d{2})_(\d{4})_(\d+)\.pdf
To: \\2_\\1_Rechnungsabschluss_Fidor_\\3.pdf
这就是我在 Python 中阅读它们的方式:
In [18]: # %load test.py
...: import yaml
...:
...: open("rename-patterns.yaml", 'r')
...:
...: stream = open("rename-patterns.yaml", 'r')
...: patterns = yaml.safe_load(stream)
...: print(patterns)
...:
{'Fidor': {'Fidor Rechnungsabschluss kurz': {'From': '^Rechnungsabschluss_(\\d{2})_(\\d{4})\\.pdf', 'To': '\\\\2_\\\\1_Rechnungsabschluss_Fidor.pdf'}, 'Fidor Rechnungsabschluss lang': {'From': '^Rechnungsabschluss_(\\d{2})_(\\d{4})_(\\d+)\\.pdf', 'To': '\\\\2_\\\\1_Rechnungsabschluss_Fidor_\\\\3.pdf'}}}
因此,每一个都\
将\\
它们读入 Python 字典。
我试图将 Yaml 字符串放入'
or "
,但没有任何帮助。
我错过了什么?
编辑
即使使用|
文字字符串(见 [1])也无济于事。
所以这
---
Fidor:
Fidor Rechnungsabschluss kurz:
From: |
^Rechnungsabschluss_(\d{2})_(\d{4})\.pdf
To: |
\\2_\\1_Rechnungsabschluss_Fidor.pdf
Fidor Rechnungsabschluss lang:
From: ^Rechnungsabschluss_(\d{2})_(\d{4})_(\d+)\.pdf
To: \\2_\\1_Rechnungsabschluss_Fidor_\\3.pdf
\
使用=>产生相同的 Python dict \\
:
{'Fidor': {'Fidor Rechnungsabschluss kurz':
{'From': '^Rechnungsabschluss_(\\d{2})_(\\d{4})\\.pdf\n', 'To': '\\\\2_\\\\1_Rechnungsabschluss_Fidor.pdf\n'},
'Fidor Rechnungsabschluss lang':
{'From': '^Rechnungsabschluss_(\\d{2})_(\\d{4})_(\\d+)\\.pdf', 'To': '\\\\2_\\\\1_Rechnungsabschluss_Fidor_\\\\3.pdf'}}}
[1] https://pyyaml.org/wiki/PyYAMLDocumentation
编辑2:最终使用[0-9]+
而不是\d+
由于我无法使其工作,我需要更改我的 yaml 文件以[0-9]+
用于数字并防止使用反斜杠。
---
Fidor:
Rechnungsabschluss kurz:
From: ^Rechnungsabschluss_([0-9]{2})_([0-9]{4})[.]pdf
To: \2_\1_Rechnungsabschluss_Fidor.pdf
Rechnungsabschluss lang:
From: ^Rechnungsabschluss_([0-9]{2})_([0-9]{4})_([0-9]+)[.]pdf
To: \2_\1_Rechnungsabschluss_Fidor_\3.pdf
解决方案
'\' 在字符串文字中开始转义字符序列。换句话说,在字符串文字中,字符 '\' 和后面的字符表示单个字符。阅读更多关于字符串文字中的转义字符序列。
在您的示例中,“\\”用于表示字符“\”。
推荐阅读
- sql - 如何在ssas Cube中计算前一周的最后一天和本周的最后一天?
- centos - 如何在 zpanel 中限制用户的磁盘空间?
- dictionary - 在 Ansible 中动态扩展字典变量
- java - AnchorPane 内的 JavaFX BorderPane?
- html - 排序和隐藏重复字段表格 Angular 4+
- jboss - 如何在when子句中迭代drl文件中的字符串列表
- javascript - 验证在javascript中不起作用
- dependencies - 替换特定 Bower 包的主 html 文件
- android - 无法从 android 的外部存储中删除视频文件 (/storage/6638-3139/DCIM/Camera/20180503_144303.mp4)
- c# - SQLEXPRESS 出现在配置连接字符串中?