[英]Python pattern matching
我目前正在将我的旧bash脚本转换为具有附加功能的Python脚本。 我已经能够完成大部分工作,但我在Python模式匹配方面遇到了很多麻烦。
在我之前的脚本中,我下载了一个网页并使用sed来获取我想要的元素。 匹配是这样完成的(对于我想要的其中一个值):
PM_NUMBER=`cat um.htm | LANG=sv_SE.iso88591 sed -n 's/.*ol.st.*pm.*count..\([0-9]*\).*/\1/p'`
它将匹配短语“olästaypm”后面的<span class="count"></span>
中包含的数字。 我正在运行此标记的标记是:
<td style="padding-left: 11px;">
<a href="/abuse_list.php">
<img src="/gfx/abuse_unread.png" width="15" height="12" alt="" title="9 anmälningar" />
</a>
</td>
<td align="center">
<a class="page_login_text" href="/pm.php" title="Du har 3 olästa pm.">
<span class="count">3</span>
</td>
<td style="padding-left: 11px;" align="center">
<a class="page_login_text" href="/blogg_latest.php" title="Du har 1 ny bloggkommentar">
<span class="count">1</span>
</td>
<td style="padding-left: 11px;" align="center">
<a class="page_login_text" href="/user_guestbook.php" title="Min gästbok">
<span class="count">1</span>
</td>
<td style="padding-left: 11px;" align="center">
<a class="page_login_text" href="/forum.php?view=3" title="Du har 1 ny forumkommentar">
<span class="count">1</span>
</td>
<td style="padding-left: 11px;" align="center">
<a class="page_login_text" href="/user_images.php?user_id=162005&func=display_new_comments" title="Du har 1 ny albumkommentar">
<span class="count">1</span>
</td>
<td style="padding-left: 11px;" align="center">
<a class="page_login_text" href="/forum_favorites.php" title="Du har 2 uppdaterade trådar i "bevakade trådar"">
<span class="count">2</span>
</td>
我很犹豫发布这个,因为看起来我要求很多,但有人可以帮我解决一下用Python解析这个问题吗? 我一直在拉我的头发试图这样做,但正则表达式和我只是不匹配(原谅双关语)。 我花了最后几个小时在正则表达式上试验和阅读Python手册,但我似乎无法弄明白。
为了说清楚,我需要的是7个不同的表达式,用于匹配<span class="count"></span>
。 例如,我需要能够找到未读PM的数量(“olästafat”)。
你不会自己解析HTML。 您将使用python中构建的html解析器来解析html。
使用正则表达式无法可靠地匹配HTML。 通常可以将一些适用于特定页面的内容拼凑在一起,但这是不可取的,因为即使对源HTML进行微妙调整也会使您的所有工作无效。 HTML只是具有比Regex能够描述的更复杂的结构。
正确的解决方案是使用专用的HTML解析器。 请注意,即使是XML解析器也无法满足您的需求,无论如何都不可靠。 有效的XHTML是有效的XML,但即使它非常相似,即使是有效的HTML也不是。 无论如何,有效的HTML / XHTML几乎不可能在野外找到。
有几种不同的HTML解析器可用:
正如其他人所说,BeautifulSoup几乎肯定是您的最佳选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.