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

时间:2015-08-07 14:50:41

标签: python regex

我有一个像这样的字符串

{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

任何想法?

2 个答案:

答案 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)

试试这个:

(?<={)([^}]+)

Regex live here.

解释

(?<={)          # starting with '{'
(               # start of capturing group
    [^}]+       # any non '}' character
)               # end of capturing group

对于您的输入,它执行了34个步骤。

希望它有所帮助。