3

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

如果深度为二,则以下应匹配

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<<>>")

但我真的想匹配没有转义的花括号。所以:

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

而且,我不确定:

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

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

4

1 回答 1

1

试试这个:

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

它表示转义的大括号或不是大括号的字符。

于 2012-12-16T22:45:42.997 回答