我有以下格式的配置文件
[COMPONENT1]
KEY1=Value
KEY2=Value
KEY3=Value
[COMPONENT2]
KEY1=Value
KEY2=Value
KEY3=Value
KEY4=Value
我无法为 re.findall()编写单行正则表达式,我可以获得" COMPONENT"(s)及其各自&#34的列表/元组; KEY(N)" - " VALUE"对迭代通过。
到目前为止,我已尝试过以下正则表达式
with open(conf,"r") as config:
match = re.findall(r,"?:\[(\w+)\](?:\s*\n*)(?:(\w+(?:\s*=\s*).+)))", config.read())
它正在回归
Match 1
Group1: 'COMPONENT1'
Group2: 'KEY1=VALUE'
Match 2
Group1: 'COMPONENT2'
Group2: 'KEY1=VALUE'
我无法制定可以显示其他' Key = Value'的正则表达式。对
非常感谢您对此的任何帮助。
注意:此配置格式无法更改。
答案 0 :(得分:3)
这不是我建议使用正则表达式的东西。正则表达式可能很棒,但是当尝试使用类似配置文件之类的东西时,它们在构造您想要阅读的内容时并不是很有帮助。除非您可以保证每条相关行的结构与install.packages("sjPlot", dependencies = T)
或[Section Name]
类似,否则和只会占用一行和 yadda yadda yadda,正则表达式只会使解析和使用配置文件变得复杂。
在您分享的正则表达式中,只有当key=value
后面跟[Section Name]
对时,您才会匹配。他们自己行上的key=value
对被忽略,因为它们前面没有key=value
。这是使正则表达式有点不适合读取配置等内容的一部分;在构造配置文件时会出现条件,这些条件必须在正则表达式中处理,使得它比任务需要更长,更复杂,或者应该在有人需要维护它时。
ConfigParser是一个python模块,允许您轻松读取.ini风格的配置文件,我建议尝试使用它,因为阅读任意[Section Name]
对的大部分艰苦工作已经解决了。