我有下一个输入字符串:
ANIM "_NAME_KEY_" // Index = 26, AFrames = 1
{
0x301C
AF 0x201C 1 0 0 FREE_ROTATE 0 FREE_SCALE_XY 100 100
}
如何在两个大括号之间获得整个字符串,只有_NAME_KEY_?
答案 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*}