re.findall返回单独的非重叠结果

时间:2018-12-01 20:53:36

标签: python regex python-3.x findall

我是Python的新手,我在正则表达式方面有些挣扎。如果我有这样的输入:

    text = <tag>xyz</tag>\n<tag>abc</tag>

是否可以获得包含以下内容的输出列表:

    matches = ['<tag>xyz</tag>','<tag>abc</tag>]

现在我正在使用以下正则表达式

    matches = re.findall(r"<tag>[\w\W]*</tag>", text)

但是,与包含两个元素的列表相比,我只获得了一个带有整个输入字符串的元素,例如:

    matches = ['<tag>xyz</tag>\n<tag>abc</tag>']

有人可以指导我吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

您只需要使捕获不贪心。

更改此正则表达式,

<tag>[\w\W]*</tag>

<tag>[\w\W]*?</tag>


import re
text = '<tag>xyz</tag>\n<tag>abc</tag>'
matches = re.findall(r"<tag>[\w\W]*?</tag>", text)
print(matches)

打印

['<tag>xyz</tag>', '<tag>abc</tag>']