2010-08-19 144 views
3

我正在处理一个小的Python脚本来清理HTML文档。它的工作方式是接受KEEP标签列表,然后通过不在列表中的HTML代码垃圾标签解析我一直使用正则表达式来执行此操作,并且我已经能够匹配开始标签和自闭合标签但没有关闭标签。我一直在试验匹配结束标签的模式是</(?!a)>。这对我来说似乎合乎逻辑,所以为什么不工作? (?!a)应该匹配任何不是锚定标记的东西(不是说“a”可以是任何东西 - 它只是一个示例)。正则表达式匹配关闭HTML标记

编辑:AGG!我猜这个正则表达式没有显示!

+0

[使用HTML :: Parser ||模具(http://stackoverflow.com/q/4231382/471272)。 :) – tchrist 2014-06-08 20:03:10

回答

3

Don't use regex to parse HTML。它只会让你头疼。

改为使用XML解析器。尝试BeautifulSouplxml

+0

我已经见过BeautifulSoup,但我也是极简主义者,所以我宁愿只使用Python附带的东西。我认为我的问题足以让我重新考虑它。谢谢! – kevin628 2010-08-19 17:26:51

+0

如果您想要“包含电池”解决方案,请查看stdlib中的HTMLParser。 – simon 2013-09-19 06:27:39

5
<TAG\b[^>]*>(.*?)</TAG> 

匹配一个特定的HTML标签的打开和关闭一对。

<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1> 

将匹配任何HTML标记的开始和结束对。

请参阅here

+6

...除非存在相同类型的嵌套标签,例如'

' - 然后,正则表达式会认为第一个'
'是第一个'
'的结束标记。正如其他作者指出的那样,您无法使用正则表达式解析HTML或任何类似的语言。 – 2011-02-27 14:33:21

+2

谢谢pavanlimo,这个正则表达式] *>(。*?)脚本>正在为我完美检测javascripts的开始和结束 – Draykos 2013-02-28 16:23:40