Python正则表达式搜索/findall。用于配置格式
我有一个以下格式的配置文件Python正则表达式搜索/findall。用于配置格式,python,regex,python-2.7,Python,Regex,Python 2.7,我有一个以下格式的配置文件 [COMPONENT1] KEY1=Value KEY2=Value KEY3=Value [COMPONENT2] KEY1=Value KEY2=Value KEY3=Value KEY4=Value 我在为re.findall()编写单行正则表达式时遇到问题,在这里我可以获得“组件”(s)的列表/元组及其各自的“键(n)”-“值”对进行迭代 到目前为止,我已经尝试了以下正则表达式 with open(conf,"r") as config:
[COMPONENT1]
KEY1=Value
KEY2=Value
KEY3=Value
[COMPONENT2]
KEY1=Value
KEY2=Value
KEY3=Value
KEY4=Value
我在为re.findall()编写单行正则表达式时遇到问题,在这里我可以获得“组件”(s)的列表/元组及其各自的“键(n)”-“值”对进行迭代
到目前为止,我已经尝试了以下正则表达式
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”对的正则表达式
非常感谢您在这方面的帮助
注意:此配置格式无法更改。我不建议对其使用正则表达式。正则表达式可能很好,但是当尝试使用配置文件之类的东西时,它们对构建您想要阅读的内容没有多大帮助。除非您能保证每个相关行的结构类似于
[节名]
或key=value
,并且只占用一行,而且yadda-yadda-yadda,否则正则表达式只会使配置文件的解析和使用复杂化
在共享的正则表达式中,仅当且仅当[节名]
后跟key=value
对时,才会进行匹配key=value
对本身的行被忽略,因为它们前面没有[节名]
。这就是为什么使用正则表达式不适合阅读配置之类的事情的一部分原因;构造配置文件时会出现一些条件,这些条件必须在正则表达式中处理,使其比任务所需的时间更长、更复杂,或者在需要维护时更复杂
是一个python模块,允许您轻松读取.ini样式的配置文件,我建议您尝试使用它,因为读取任意
key=value
对的大部分艰苦工作已经解决 到目前为止你一直在尝试什么?请用您的代码编辑您的问题。请参阅。@SRD,添加了代码段。谢谢。这一条有效地减少了我的工作量。