如何将HTML与Regex匹配

时间:2014-07-31 18:30:00

标签: python regex

我试图使用python在html文件中提取一些网址。这是文本的样子:

preabc!precde<preefg<

我想提取&#34; cde&#34;和&#34; efg&#34;。我使用的模式:

pre(.*?)<
pre(.(?!^pre)).*?<

然而,它们都不起作用:(。请注意,&#34; cde&#34;以及&#34; efg&#34;的实际长度是未知的。我对正则表达不熟悉所以请说明你的答案。非常感谢。

编辑:

对不起我的错误解释和含糊不清的例子。我想提取诸如&#34; GIRL FRIENDS&#34;等标题。 具有特定日期(在本案例中为2014-7-31):

<a href="http://rs.xidian.edu.cn/forum.php?mod=viewthread&amp;tid=662128&amp;extra=page%3D1" onclick="atarget(this)" class="s xst">GIRL FRIENDS</a> <span class="tps">&nbsp;...<a href="http://rs.xidian.edu.cn/forum.php?mod=viewthread&tid=662128&amp;extra=page%3D1&amp;page=2">2</a></span> <a href="http://rs.xidian.edu.cn/forum.php?mod=redirect&amp;tid=662128&amp;goto=lastpost#lastpost" class="xi1">New</a> </th> <td class="by"> <cite> <a href="http://rs.xidian.edu.cn/home.php?mod=space&amp;uid=265770" c="1">机器人</a></cite> <em><span><span title="2014-7-31">昨天&nbsp;23:55</span></span></em> </td>

3 个答案:

答案 0 :(得分:2)

您可以尝试:

 (>([A-Z ]+?)<|title="([\d-]+))

Test it here

你得到的更具体和更不可预测,正则表达式将变得越复杂和难以理解。我不建议使用正则表达式,而是尝试使用HTML解析器。

答案 1 :(得分:1)

我认为最好的答案是不要尝试使用正则表达式解析HTML。有很多html解析库可用。使用正则表达式只会引起麻烦。

答案 2 :(得分:0)

这应该可以解决问题:

pre.*!pre(.*)<pre(.*)<

说明:

pre.*!忽略第一部分&#39; abc&#39;因为它开始:从pre开始,任意长度的任意字符体(.*部分满足任何东西)以!

结束

pre(.*)<接受cde。与上面相同,但它存储匹配组1中正文中的内容,()是匹配的组。

pre(.*)<接受efg。与上述相同,但存储在匹配组2中

请注意,!<都是负责划分字符串的人。