正则表达式匹配关闭的 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。

【讨论】:

...除非有相同类型的嵌套标签,例如&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt; - 那么,正则表达式会认为第一个 &lt;/div&gt; 是第一个 &lt;div&gt; 的结束标记。正如其他作者指出的那样,您无法使用正则表达式解析 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 标记的主要内容,如果未能解决你的问题,请参考以下文章

python HTML正则表达式标记匹配器

PHP 正则表达式以匹配HTML标记

正则表达式在 html 锚标记内不匹配 [重复]

用于匹配具有特定属性的 HTML 标记的正则表达式 [重复]

使用 < 和 > 对代码进行编码时,正则表达式匹配除 HTML 标记之外的任何内容

什么正则表达式将匹配文本,不包括 HTML 标记中的内容?