Python正则表达式搜索/ findall。对于配置格式

时间:2017-11-13 07:30:12

标签: python regex python-2.7

我有以下格式的配置文件

[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'的正则表达式。对

非常感谢您对此的任何帮助。

注意:此配置格式无法更改。

1 个答案:

答案 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]对的大部分艰苦工作已经解决了。