如何在花括号之间找到多行文字?

时间:2013-08-19 15:15:34

标签: python regex

我有下一个输入字符串:

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

如何在两个大括号之间获得整个字符串,只有_NAME_KEY_?

3 个答案:

答案 0 :(得分:3)

使用选项re.MULTILINE作为re.compile / etc的第二个参数。调用

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

<强>解释

_NAME_KEY_:匹配“_NAME_KEY _”

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

\{:匹配{character

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

\}:匹配一个}字符

答案 1 :(得分:1)

re.findall(r'(?<={)[^}]*',str)

E.g。

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    ']

答案 2 :(得分:0)

使用:

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

结果是在第一个捕获组中。您不需要使用dotall模式,因为此模式不使用点。

除了通知,你可以修剪那样的白色空间:

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