在同一字符串中具有多个匹配项的Python正则表达式 test='part1part2' 打印(关于findall((*),测试))

在同一字符串中具有多个匹配项的Python正则表达式 test='part1part2' 打印(关于findall((*),测试)),python,regex,python-3.x,Python,Regex,Python 3.x,它输出: ['part2'] 文本可以有任意数量的“部分”。我想把它们全部归还,而不仅仅是最后一个。最好的方法是什么?您可以将您的*更改为*?,这样他们就不会贪婪了。这将使您的原始示例起作用: import re test = '<tag>part1</tag><tag can have random stuff here>part2</tag>' print(re.findall(r'<tag.*?>(.*?)</tag&g

它输出:

['part2']

文本可以有任意数量的“部分”。我想把它们全部归还,而不仅仅是最后一个。最好的方法是什么?

您可以将您的
*
更改为
*?
,这样他们就不会贪婪了。这将使您的原始示例起作用:

import re

test = '<tag>part1</tag><tag can have random stuff here>part2</tag>'
print(re.findall(r'<tag.*?>(.*?)</tag>', test))

虽然最好不要只使用正则表达式来解析它,而是使用适当的HTML解析器库。

看起来您正在尝试使用正则表达式解析HTML。。。我想到的一种方法是复制字符串,然后删除的所有匹配项,然后删除的,但我相信有更好的方法可以做到这一点。之所以只捕获其中一个部分,是因为您使用的是贪婪的
*
。如果将第一个
*
改为
*?
,则
修饰符将使其成为非贪婪修饰符,这可以实现您试图实现的目标。但正如@jornsharpe所指出的,请不要使用正则表达式作为HTML的解析方法。
['part1', 'part2']