【发布时间】:2014-03-27 19:07:19
【问题描述】:
您好 python 和正则表达式专家!
我有一个包含很多 yaml 文件的文件树,我需要在其中更改文件中多个位置的路径字符串。
yaml 文件可能如下所示:
之前
- !import ../../../app/app.yml
- !import ../../fw/fw/app.yml
- !import ../../id/id/app.yml
includes: [ ../, ../../../app/include/, ../../fw/include, ]
includes:
- ../
- ../../../app/include/
- ../../fw/include
需要改成:
通缉
- !import ../../../Sys/app/app.yml
- !import ../../Sys/fw/fw/app.yml
- !import ../../id/id/app.yml
includes: [ ../, ../../../Sys/app/include/, ../../Sys/fw/include, ]
includes:
- ../
- ../../../Sys/app/include/
- ../../Sys/fw/include
...所以每个路径都必须以 /Sys 为前缀,因为指向的文件的位置已经改变。请注意,某些路径不得更改:'- !import ../../id/id/app.yml' 不得更改(可能还有其他路径)
上面的示例中有两个包含标记,因为它在要更改的文件中的写入方式不同。
所以我需要一个适用于上述所有组合的正则表达式。我已经尝试了很多迭代,但我正在努力涵盖两个包含标签。
注意:我宁愿使用纯文本文件解析而不是使用pyaml,以免破坏文件的格式,因为其中一些包含很多cmets。
欢迎提出任何建议-谢谢
【问题讨论】:
-
“(可能还有其他路径)”是一个可怕的想法。生成的表达式可能适用于您那里的内容,但它肯定不会容纳未知数。我建议您执行多次替换,准确替换您想要替换的内容(例如,将
../app替换为../Sys/app)。