首页 > 解决方案 > re.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>']

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

标签: pythonregexpython-3.xfindall

解决方案


你只需要让你的捕获不贪心。

更改此正则表达式,

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

推荐阅读