Проблема с регулярным выражением Python - PullRequest
0 голосов
/ 18 апреля 2009

Я пытаюсь регулярное выражение строки с веб-страницы. Строка выглядит следующим образом:

<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 ]

4 голосов
/ 18 апреля 2009

Не существует надежного способа сделать это с помощью регулярного выражения. См. Можете ли вы привести некоторые примеры того, почему трудно анализировать XML и HTML с помощью регулярного выражения? , почему. Что вам нужно, так это HTML-парсер, такой как HTMLParser :

#!/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 голос
/ 18 апреля 2009

Звучит так, как будто вы хотите использовать 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, встроенного в Python .

1 голос
/ 18 апреля 2009

Это

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

Это то, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...