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