Python正则表达式未返回所需结果

Python正则表达式未返回所需结果,python,regex,Python,Regex,我有一根这样的绳子 {test}{test2}{test3} 我有一个带有regex的函数,它应该提取{}之间的所有内容 def cleanup(): mystring = str('{test}{test2}{test3}') rx = re.findall(r'{(.*)}', mystring) for row in rx: return(rx) 但是当我打印这个函数而不是得到想要的 test, test2, test3 它回来了 test}{

我有一根这样的绳子

{test}{test2}{test3}
我有一个带有regex的函数,它应该提取{}之间的所有内容

def cleanup():
    mystring = str('{test}{test2}{test3}')
    rx = re.findall(r'{(.*)}', mystring)
    for row in rx:
        return(rx)
但是当我打印这个函数而不是得到想要的

test, test2, test3
它回来了

test}{test2}{test3
有什么想法吗?

试试这个:

(?<={)([^}]+)
(?试试这个:

(?<={)([^}]+)
(?使用
*?
进行评估,即查找更多较短的匹配项,而不是一个较长的匹配项

>>> re.findall(r'{(.*?)}', mystring)
['test', 'test2', 'test3']

顺便说一句,在你的功能,当你这样做

for row in rx:
    return(rx)
这将只返回第一个
,而忽略其余的行!相反,您可以只返回列表,而不返回循环,即

return rx
或者,您可以将函数转换为生成器,并
生成多个结果

for row in rx:
    yield rx
使用
*?
进行评估,即查找更多较短的匹配项,而不是一个较长的匹配项

>>> re.findall(r'{(.*?)}', mystring)
['test', 'test2', 'test3']

顺便说一句,在你的功能,当你这样做

for row in rx:
    return(rx)
这将只返回第一个
,而忽略其余的行!相反,您可以只返回列表,而不返回循环,即

return rx
或者,您可以将函数转换为生成器,并
生成多个结果

for row in rx:
    yield rx

试试这个
r'{(.*)}
风格提示:
mystring=str({test}{test2}{test3}')
可以更简洁地写成
mystring={test}{test2}{test3}
。Python是一种动态语言,所以你不必显式地告诉变量它是字符串;它可以自己推断出来。试试这个
r'{(.*)
Style-tip:
mystring=str({test}{test2}{test3}')
可以更简洁地写成
mystring={test}{test2}{test3}
。Python是一种动态语言,因此您不必显式地告诉变量它是字符串;它可以自己推断出来。
(?@chepner.你是对的。如果是这样,它将执行16步!!更快:代码>(?@chepner.你是对的。如果是这样,它将执行16步!!更快: