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

2024-04-19 02:52:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一根这样的绳子

{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

有什么想法吗


Tags: 函数testre内容fordefrxregex
2条回答

使用.*?进行non-greedy求值,即查找更多较短的匹配,而不是一个较长的匹配

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

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

for row in rx:
    return(rx)

这将只返回第一个row,而忽略其余的!相反,您可以只返回列表,不使用循环,即

return rx

或者您可以将函数转换为生成器,然后yield生成几个结果

for row in rx:
    yield rx

试试这个:

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

Regex live here.

说明:

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

对于您的输入,它有34个步骤

希望有帮助

相关问题 更多 >