Python,正则表达式和html:匹配最后一个标签

我对python贪婪/不贪婪的字符感到困惑。

“给定多行html,返回每行的最终标签。”

我会认为这是正确的:

re.findall('<.*?>$', html, re.MULTILINE)

我很厌烦,因为我期望的单个标签列表如下:

"</html>", "<ul>", "</td>".

我的O'Reilly的袖珍参考文献说*? 将“匹配0次或更多次,但尽可能少”。

那么为什么我会得到'贪婪的'匹配,即在一些(但不是全部)匹配中有多个标签?


你的问题源于你有一个行尾锚('$')的事实。 非贪婪匹配工作的方式是引擎首先搜索行上的第一个无约束模式(在您的案例中为'<')。 然后它会查找第一个'>'字符(您用$ anchor限制的字符位于该行的末尾)。 所以在这种情况下,非贪婪*与贪婪*没有任何区别。

既然你不能从你的RE中删除'$'(你正在寻找一行最后的标签),你需要采取另一种方法......参见@ Mark的答案。 '<[^> <] *> $'将起作用。

链接地址: http://www.djcxy.com/p/13407.html

上一篇: Python, regex and html: match final tag on line

下一篇: Are (non