我有一个用户可以指定部分的配置文件,然后在这些部分中他们可以指定正则表达式。我必须解析这个配置文件并将正则表达式分成各个部分。
是否有一种简单的方法可以从节标题中分隔正则表达式?我只想到了标准
[section] regex1 regex2
但我刚才意识到[section]是一个有效的正则表达式。所以我想知道是否有一种方法可以格式化节标题,以便它只能被理解为节标题而不是正则表达式。
答案 0 :(得分:4)
有无限制的无效正则表达式,但首先想到的是
*section*
在正则表达式的开头你不能有量词(*
)。
(另一个*
只是为了满足我对对称性的迷恋。)
答案 1 :(得分:1)
我不知道你的问题域名,所以我不知道你期待什么样的正则表达式,但在我看来你应该保持你的部分格式化。以[并以]结尾并且中间没有方括号的正则表达式是非常不寻常的。它只能匹配单个字符。因此请保留部分标题。严格地说,它们是有效的正则表达式,但它们可能不是有趣的正则表达式。
另外,为什么不使用标准库中的ConfigParser
,让它为你做解析?
答案 2 :(得分:0)
有简单的方法,但它们都需要更改格式:
使用某种列表语法。 ast.literal_eval会有所帮助。
section1 = [
"regex 1",
"2",
"3",
]
section2 = ["..."]
主要是,不要发明自己的格式,或尽可能接近已知格式。第三个是Python语法的子集,例如,您甚至可以自然地使用原始字符串文字。
JSON或YAML可能对您有用。
答案 3 :(得分:0)
正如其他人所说,请不要发明另一种配置格式。使用Python标准库的ConfigParser,它将能够完全按照您所示的方式解析[section]符号。
编辑:allow_no_value选项允许您只有一个条目,而不是键/值对。默认的dict类型是OrderedDict,因此它将保持顺序。