特定の深さを超えない、ネストされた対応する括弧のさまざまな組み合わせを一致させたいと思います。
深さが 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<<>>")
しかし、実際には、エスケープされていない中かっこに一致させたいと思っています。そう:
OPEN = r"(?<!\\)[\{]"
CLOSE = r"(?<!\\)[\}]"
そして、私が確信していないもの:
INNER = r"[^(?<!\\)[\}\{]]"
これはうまくいかないようです。何か案は。これは頭が痛い!