Python正则表达式问题

时间:2009-04-17 22:47:54

标签: python html regex

我正在尝试从网页上重新编写一行代码。该行如下:

<tr><td width=60 bgcolor='#ffffcc'><b>random Value</b></td><td align=center width=80>

这是我尝试过的,但它似乎没有用,任何人都可以帮助我吗? 'htmlbody'包含html页面,不,我没有忘记导入're'。

reg = re.compile("<tr><td width=60 bgcolor='#ffffcc'><b>([^<]*)</b></td><td align=center width=80>")
value = reg.search(htmlbody)
print 'Value is', value

3 个答案:

答案 0 :(得分:4)

使用正则表达式无法实现这一目标。有关原因,请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?。您需要的是像HTMLParser这样的HTML解析器:

#!/usr/bin/python

from HTMLParser import HTMLParser

class FindTDs(HTMLParser):
        def __init__(self):
                HTMLParser.__init__(self)
                self.level = 0

        def handle_starttag(self, tag, attrs):
                if tag == 'td':
                        self.level = self.level + 1

        def handle_endtag(self, tag):
                if tag == 'td':
                        self.level = self.level - 1

        def handle_data(self, data):
                if self.level > 0:
                        print data

find = FindTDs()

html = "<table>\n"
for i in range(3):
        html += "\t<tr>"
        for j in range(5):
                html += "<td>%s.%s</td>" % (i, j)
        html += "</tr>\n"
html += "</table>"

find.feed(html)

答案 1 :(得分:1)

import re

htmlbody = "<tr><td width=60 bgcolor='#ffffcc'><b>random Value</b></td><td align=center width=80>"

reg = re.compile("<tr><td width=60 bgcolor='#ffffcc'><b>([^<]*)</b></td><td align=center width=80>")
value = reg.search(htmlbody).group(1)
print 'Value is', value

打印出来

Value is random Value

这是你想要的吗?

答案 2 :(得分:1)

听起来您可能想要使用findall而不是search

reg = re.compile("<tr><td width=60 bgcolor='#ffffcc'><b>([^<]*)</b></td><td align=center width=80>")
value = reg.findall(htmlbody)
print 'Found %i match(es)' % len(value)
但是,我必须提醒你,正则表达式在处理HTML方面非常糟糕。你最好使用HTMLParser module built in to Python

使用正确的解析器