Python正则表达式匹配html文件

时间:2016-04-16 07:03:44

标签: python html regex

我想在html文件中匹配。这是html:

<td>
<b>BBcode</b><br />
<textarea onclick='this.select();' style='width:300px;     height:200px;' />
[URL=http://someimage.com/LwraZS1]          [IMG]http://t1.someimage.com/LwraZS1.jpg[/IMG][    [/URL] [URL=http://someimage.com/CDnuiST]   [IMG]http://t1.someimage.com/CDnuiST.jpg[/IMG]   [/URL] [URL=http://someimage.com/Y0oZKPb][IMG]http://t1.someimage.com/Y0oZKPb.jpg[/IMG][/URL] [URL=http://someimage.com/W2RMAOR][IMG]http://t1.someimage.com/W2RMAOR.jpg[/IMG][/URL] [URL=http://someimage.com/5e5AYUz][IMG]http://t1.someimage.com/5e5AYUz.jpg[/IMG][/URL] [URL=http://someimage.com/EWDQErN][IMG]http://t1.someimage.com/EWDQErN.jpg[/IMG][/URL]
</textarea>
</td>

我想从[to]中提取所有BB代码。

这是我的代码:

import re
x = open('/xxx/xxx/file.html', 'r').read
y = re.compile(r"""<td> <b>BBcode</b><br /><textarea onclick='this.select();' style='width:300px; height:200px;' />. (. *) </textarea> </td>""") 
z  = y.search(str(x())
print z          

但是当我运行这个时我得到无对象......错误在哪里?

3 个答案:

答案 0 :(得分:0)

我认为你需要添加类似z.group()的内容才能退出正则表达式对象,对吧?所以,只需将最后一行更改为

print z.group()

可能会这样做。

答案 1 :(得分:0)

import re
x = open('/xxx/xxx/file.html', 'rt').read()
r1 = r'<textarea.*?>(.*?)</textarea>'
s1 = re.findall(r1, s, re.DOTALL)[1] # just by inspection
r2 = r'\[(.*?)\]'
s2 = re.findall(r2, s1)
for u in s2:
    print(u)

答案 2 :(得分:0)

我会使用解析器:

from html import HTMLParser

class MyHtmlParser(HTMLParser):
    def __init__(self):
        self.reset()
        self.convert_charrefs = True
        self.dat = []
    def handle_data(self, d):
        self.dat.append(d.strip())
    def return_data(self):
        return self.dat
>>> with open('sample.html') as htmltext:
        htmldata = htmltext.read()
>>> parser = MyHtmlParser()
>>> parser.feed(htmldata)
>>> res = parser.return_data()
>>> res = [item for item in filter(None, res)]
>>> res[0]
'BBcode'
>>>