正则表达式和有限深度非转义括号匹配

时间:2012-12-16 22:39:36

标签: python regex

我想匹配不超过给定深度的嵌套匹配括号的各种组合。

如果深度为2,则以下内容应匹配

H<>
H<a>
H<<a><b>>
H<a<b>c<d>>

这些不应该:

H<<<>>>
H<<<>><<><>><>>

我以为我会创建一个生成正则表达式的函数

INNER = r"[^<>]"
OPEN  = r"<"
CLOSE = r">"

def parenthesis(depth=2):
    if depth == 0:
        return INNER
    inner = "("
    for i in range(depth):
        inner += parenthesis(i) + "|"
    inner = inner[:-1]+")*?"
    return "("+OPEN + inner + CLOSE+")"
如果我这样做,这似乎有效(尽管我并不完全自信),例如:

re.match("H"+parentthesis(2), "H<<>>")

但实际上我想匹配未转义的curley括号。所以:

OPEN = r"(?<!\\)[\{]"
CLOSE = r"(?<!\\)[\}]"

并且,我不确定的是:

INNER = r"[^(?<!\\)[\}\{]]"

这似乎不起作用。有任何想法吗。这让我很头疼!

1 个答案:

答案 0 :(得分:1)

试试这个:

INNER = r"(?:\\{|\\}|[^{}])"

这意味着逃脱的大括号或不是大括号的角色。