2

我有一个配置文件,用户可以指定部分,然后在这些部分中他们可以指定正则表达式。我必须解析这个配置文件并将正则表达式分成不同的部分。

有没有一种简单的方法可以将正则表达式与节标题分隔开来?我想的只是标准

[部分]
正则表达式1
正则表达式2

但我刚刚意识到 [section] 是一个有效的正则表达式。所以我想知道是否有一种方法可以格式化节标题,以便它只能被理解为节标题而不是正则表达式。

4

4 回答 4

4

有无数种方法可以制作无效的正则表达式,但首先想到的是

*section*

*正则表达式的开头不能有量词 ( )。

(另一个*只是为了满足我对对称的痴迷。)

于 2010-09-18T21:55:26.520 回答
1

我不知道你的问题域,所以我不知道你期望什么形式的正则表达式,但在我看来你应该保持你的部分格式不变。以 [ 开头并以 ] 结尾且中间没有方括号的正则表达式是非常不寻常的。它只能匹配单个字符。因此,保留部分标题不变。严格来说,它们是有效的正则表达式,但它们可能不是有趣的正则表达式。

另外,为什么不使用ConfigParser标准库,让它为你解析呢?

于 2010-09-18T23:18:11.373 回答
0

正如其他人所说,请不要发明另一种配置格式。使用 Python 标准库的ConfigParser,它将能够完全按照您所展示的那样解析 [section] 符号。

编辑:allow_no_value 选项允许您只有一个条目,而不是键/值对。并且默认的dict类型是OrderedDict,所以它会保持顺序。

于 2010-09-19T22:58:04.560 回答
0

有一些简单的方法,但它们都需要更改格式:

  1. 使用缩进,类似于 Python 源代码的解释方式。前导空格需要特殊处理,例如“(?: )abc”而不是“abc”。
  2. 使用 INI 格式,其中一个部分中的每个项目都需要一个名称=值对。
  3. 使用某种列表语法。 ast.literal_eval会有所帮助。

    section1 = [
      "regex 1",
      "2",
      "3",
    ]
    section2 = ["..."]
    

首先,不要发明自己的格式,或者尽可能使其接近已知格式。例如,第三个是 Python 语法的子集,您甚至可以自然地使用原始字符串文字。

JSON 或 YAML 可能对您有用。

于 2010-09-18T22:02:36.823 回答