5

次の入力文字列があります。

ANIM "_NAME_KEY_" // Index = 26, AFrames = 1
    {
        0x301C
        AF  0x201C  1   0   0   FREE_ROTATE 0   FREE_SCALE_XY 100 100
    }

_NAME_KEY_ を持つだけで、2 つの中括弧の間の文字列全体を取得するにはどうすればよいですか?

4

3 に答える 3

6

オプションre.MULTILINEを re.compile/etc の 2 番目の引数として使用します。電話。

私はこの正規表現を提案します:_NAME_KEY_[^{]*+\{([^}]+)\}

説明:

_NAME_KEY_: 「_NAME_KEY_」に一致

[^{]*: できるだけ多くの { 以外の文字に一致 (貪欲)

\{: { 文字に一致

([^}]+): } 以外の文字に一致 (およびキャプチャ) します (貪欲)

\}: 1 つの } 文字に一致

于 2013-08-19T15:20:58.740 に答える
2
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    ']
于 2013-08-19T15:22:22.293 に答える
0

使用する:

_NAME_KEY_[^{]*\{([^}]*)}

結果は最初のキャプチャ グループにあります。このパターンはドットを使用しないため、dotall モードを使用する必要はありません。

余談ですが、次のように空白を削除できます。

_NAME_KEY_[^{]*\{\s*([^}]*?)\s*}
于 2013-08-19T15:20:38.017 に答える