我想匹配不超过给定深度的嵌套匹配括号的各种组合。
如果深度为二,则以下应匹配
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"[^(?<!\\)[\}\{]]"
这似乎不起作用。有任何想法吗。这让我很头疼!