我对python贪婪/不贪婪的角色感到困惑 .
“给定多行html,返回每行的最终标记 . ”
我认为这是正确的:
re.findall('<.*?>$', html, re.MULTILINE)
我很烦,因为我期待一个单独的标签列表,如:
"</html>", "<ul>", "</td>".
我的口袋参考说 *?
wil "match 0 or more times, but as few times as possible."
那么为什么我会得到“贪婪”的比赛,比如一些(但不是全部)比赛中有多个?
1 回答
你的问题源于你有一个行尾锚('$') . 非贪婪匹配的工作方式是引擎首先在行上搜索第一个无约束模式(在您的情况下为“<”) . 然后它会查找第一个'>'字符(你已经约束了,使用$ anchor,它位于该行的末尾) . 因此,在这种情况下,非贪婪与贪婪没有任何不同 .
由于你无法从你的RE中删除'$'(你正在寻找一行的最终标签),你需要采取不同的方法......请参阅@ Mark的答案 . '<[^> <] *> $'可以使用 .