我想匹配不超过给定深度的嵌套匹配括号的各种组合。
如果深度为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"[^(?<!\\)[\}\{]]"
这似乎不起作用。有任何想法吗。这让我很头疼!
答案 0 :(得分:1)
试试这个:
INNER = r"(?:\\{|\\}|[^{}])"
这意味着逃脱的大括号或不是大括号的角色。