「テンプレート」がわかっていれば、この文字列から {{template|{{template2}}|other params}} を抽出する方法:
{{template0}}
{{template|{{template2}}|other params}}
{{template3}}
これはあなたが望むことをするはずです:
>>> match = re.search(r'^{{template\b.*$', your_string, re.M)
>>> match.group()
'{{template|{{template2}}|other params}}'
「template」の後に単語境界 ( \b
) を使用するため、「template0」または「template3」と一致しません。このre.M
オプションはそのよう^
に使用され$
、文字列の先頭と末尾ではなく、行の先頭と末尾に一致します。
編集:コメントの改行ケースに対して次の正規表現を試してください:
r'^{{template\b(?:[^}]\n+|\n+[^{]|.)*$'
これは、改行を の前または後に置いても機能するはずです|
。
編集 2:正規表現の質問では、入力がどのように見えるかを事前に指定することが非常に重要です。これは、最新のコメントのテキストで機能する別のバージョンです。
r'^{{template\b(?:[^}\n]\n+|\n+[^{\n]|.)*}}$'
これで、複数の改行が正しく処理され}}
ます。一致が他の形式の行の前の最後の角括弧グループである場合に備えて、最後に を追加しました。