我有一个像这样的字符串
{test}{test2}{test3}
我有一个正则表达式的函数,它应该在{}
之间提取所有内容def cleanup():
mystring = str('{test}{test2}{test3}')
rx = re.findall(r'{(.*)}', mystring)
for row in rx:
return(rx)
但是当我打印此功能而不是获得所需的
时test, test2, test3
它返回
test}{test2}{test3
任何想法?
答案 0 :(得分:3)
使用.*?
进行non-greedy评估,即查找更多较短的匹配而不是一个较长的匹配。
>>> re.findall(r'{(.*?)}', mystring)
['test', 'test2', 'test3']
BTW,在你的功能中,当你做
时for row in rx:
return(rx)
这将只返回第一个row
而忽略其余的!相反,你可以只返回列表,没有循环,即
return rx
或者您可以将函数转换为生成器,yield
几个结果
for row in rx:
yield rx
答案 1 :(得分:1)
试试这个:
(?<={)([^}]+)
解释
(?<={) # starting with '{'
( # start of capturing group
[^}]+ # any non '}' character
) # end of capturing group
对于您的输入,它执行了34个步骤。
希望它有所帮助。