我有下一个输入字符串:
ANIM "_NAME_KEY_" // Index = 26, AFrames = 1
{
0x301C
AF 0x201C 1 0 0 FREE_ROTATE 0 FREE_SCALE_XY 100 100
}
我怎样才能得到两个花括号之间的整个字符串,只有 _NAME_KEY_ ?
将该选项re.MULTILINE
用作 re.compile/etc 的第二个参数。称呼。
我会提出这个正则表达式:_NAME_KEY_[^{]*+\{([^}]+)\}
解释:
_NAME_KEY_
:匹配“_NAME_KEY_”
[^{]*
: 匹配尽可能多的非{字符(贪心)
\{
: 匹配一个 { 字符
([^}]+)
:匹配(并捕获)非}字符(贪婪)
\}
: 匹配一个 } 字符
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*}