【问题标题】:Python regex search/findall. For a config formatPython 正则表达式搜索/查找。对于配置格式
【发布时间】:2023-03-29 20:31:01
【问题描述】:

我有一个如下格式的配置文件

[COMPONENT1]
KEY1=Value
KEY2=Value
KEY3=Value

[COMPONENT2]
KEY1=Value
KEY2=Value
KEY3=Value
KEY4=Value

我在为 re.findall() 编写单行正则表达式时遇到问题,我可以在其中获取“COMPONENT”及其各自的“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”对的正则表达式。

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

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

【问题讨论】:

标签: python regex python-2.7


【解决方案1】:

我不建议使用正则表达式。正则表达式可能很棒,但是当尝试使用配置文件之类的东西时,它们对于构建您想要阅读的内容并不是很有帮助。除非您能保证每条相关行的结构都类似于[Section Name]key=value,否则并且只占一行, yadda yadda yadda,正则表达式只会使配置文件的解析和使用复杂化。

在您共享的正则表达式中,只有当且仅当 [Section Name] 后跟 key=value 对时,您才会匹配。 key=value 在他们自己的行上的对被忽略,因为它们前面没有 [Section Name]。这是使用正则表达式有点不适合读取配置等事情的部分原因;在构建配置文件时会出现一些条件,这些条件必须在正则表达式中处理,使其比任务所需的时间更长、更复杂,或者当有人需要维护它时。

ConfigParser 是一个 python 模块,可让您轻松读取 .ini 样式的配置文件,我建议尝试使用它,因为读取任意 key=value 对的大部分艰苦工作已经解决。

【讨论】:

  • 感谢这个工作并为我减少了很多工作。
猜你喜欢
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 2015-02-23
  • 2015-05-30
相关资源
最近更新 更多