5

我有下一个输入字符串:

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

我怎样才能得到两个花括号之间的整个字符串,只有 _NAME_KEY_ ?

4

3 回答 3

6

将该选项re.MULTILINE用作 re.compile/etc 的第二个参数。称呼。

我会提出这个正则表达式:_NAME_KEY_[^{]*+\{([^}]+)\}

解释:

_NAME_KEY_:匹配“_NAME_KEY_”

[^{]*: 匹配尽可能多的非{字符(贪心)

\{: 匹配一个 { 字符

([^}]+):匹配(并捕获)非}字符(贪婪)

\}: 匹配一个 } 字符

于 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 回答