re.findall return 单独的非重叠结果

re.findall return separate non-overlapping results

我是 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>']

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

你只需要让你的捕获是非贪婪的。

更改此正则表达式,

<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>']