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步!!更快: