正则表达式匹配关闭的 HTML 标记
Posted
技术标签:
【中文标题】正则表达式匹配关闭的 HTML 标记【英文标题】:Regular expression to match closing HTML tags 【发布时间】:2011-04-01 06:17:44 【问题描述】:我正在编写一个小型 Python 脚本来清理 html 文档。它的工作原理是接受 KEEP 的标签列表,然后解析不在列表中的 HTML 代码垃圾标签但不是结束标签。
我一直在尝试匹配结束标签的模式是</(?!a)>
。这对我来说似乎是合乎逻辑的,所以为什么不起作用? (?!a)
应该匹配任何不是锚标记的东西(不是“a”可以是任何东西——这只是一个例子)。
编辑:AGG!我猜正则表达式没有显示!
【问题讨论】:
use HTML::Parser || die。 :) 【参考方案1】:阅读:
RegEx match open tags except XHTML self-contained tags Can you provide some examples of why it is hard to parse XML and HTML with a regex?悔改。
使用真正的 HTML 解析器,例如 BeautifulSoup。
【讨论】:
【参考方案2】:<TAG\b[^>]*>(.*?)</TAG>
匹配特定 HTML 标记的开始和结束对。
<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>
将匹配任何 HTML 标记的开始和结束对。
见here。
【讨论】:
...除非有相同类型的嵌套标签,例如<div><div></div></div>
- 那么,正则表达式会认为第一个 </div>
是第一个 <div>
的结束标记。正如其他作者指出的那样,您无法使用正则表达式解析 HTML 或任何类似语言。
感谢 pavanlimo,这个正则表达式 【参考方案3】:
Don't use regex to parse HTML。只会让你头疼。
改为使用 XML 解析器。试试BeautifulSoup 或lxml。
【讨论】:
我见过 BeautifulSoup,但我也是一个极简主义者,所以我更喜欢只使用 Python 附带的东西。我认为我的问题足以让我重新考虑它。谢谢! 如果您想要“包含电池”的解决方案,请查看标准库中的 HTMLParser。【参考方案4】:您也可以考虑使用 python 内置的 html 解析器(Python 2 和 Python 3 的文档)
这将帮助您找到您想要处理的 HTML 文档的特定区域 - 并在其上使用正则表达式。
【讨论】:
以上是关于正则表达式匹配关闭的 HTML 标记的主要内容,如果未能解决你的问题,请参考以下文章
用于匹配具有特定属性的 HTML 标记的正则表达式 [重复]