确定字符串是否不是有效正则表达式的简单方法

时间:2010-09-18 21:53:08

标签: python regex parsing delimiter

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

是否有一种简单的方法可以从节标题中分隔正则表达式?我只想到了标准

[section]
regex1
regex2

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

4 个答案:

答案 0 :(得分:4)

有无限制的无效正则表达式,但首先想到的是

*section*

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

    section1 = [
      "regex 1",
      "2",
      "3",
    ]
    section2 = ["..."]
    
  4. 主要是,不要发明自己的格式,或尽可能接近已知格式。第三个是Python语法的子集,例如,您甚至可以自然地使用原始字符串文字。

    JSON或YAML可能对您有用。

答案 3 :(得分:0)

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

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