次の入力文字列があります。
ANIM "_NAME_KEY_" // Index = 26, AFrames = 1
{
0x301C
AF 0x201C 1 0 0 FREE_ROTATE 0 FREE_SCALE_XY 100 100
}
_NAME_KEY_ を持つだけで、2 つの中括弧の間の文字列全体を取得するにはどうすればよいですか?
オプションre.MULTILINE
を re.compile/etc の 2 番目の引数として使用します。電話。
私はこの正規表現を提案します:_NAME_KEY_[^{]*+\{([^}]+)\}
説明:
_NAME_KEY_
: 「_NAME_KEY_」に一致
[^{]*
: できるだけ多くの { 以外の文字に一致 (貪欲)
\{
: { 文字に一致
([^}]+)
: } 以外の文字に一致 (およびキャプチャ) します (貪欲)
\}
: 1 つの } 文字に一致
re.findall(r'(?<={)[^}]*',str)
例えば
In [5]: x="""ANIM "_NAME_KEY_" // Index = 26, AFrames = 1
{
0x301C
AF 0x201C 1 0 0 FREE_ROTATE 0 FREE_SCALE_XY 100 100
}"""
In [6]: import re
In [7]: re.findall(r'(?<={)[^}]*',x)
Out[7]: ['\n 0x301C\n AF 0x201C 1 0 0 FREE_ROTATE 0 FREE_SCALE_XY 100 100\n ']
使用する:
_NAME_KEY_[^{]*\{([^}]*)}
結果は最初のキャプチャ グループにあります。このパターンはドットを使用しないため、dotall モードを使用する必要はありません。
余談ですが、次のように空白を削除できます。
_NAME_KEY_[^{]*\{\s*([^}]*?)\s*}