0

我对这段代码有点麻烦,因为它没有按照我的意图工作。我知道正则表达式不是解决这个问题的最佳方法,但我不知道如何使用 html 解析器来做到这一点,而且漂亮的汤不是一种选择。这就是我想要做的事情。我有一个 html 文件,我需要提取两者之间的值

<div class="e_mail"> and </div>

当我使用以下代码时,它会返回电子邮件地址:

['returned@email.com']

我怎样才能得到没有括号和引号的电子邮件地址?我宁愿使用比 reg 更干净的东西,但正如我所说,无法弄清楚 html 解析器。

f=urllib.urlopen('results.html')
s = str(f.read())
return re.compile('<div class="e_mail">(.*?)</div>', re.DOTALL).findall(s)
4

2 回答 2

1

return re.compile(expr, re.DOTALL).findall(s)[0]

或者:

return re.findall(r'<div class="e_mail">(.*?)</div>', s, re.DOTALL)[0]

请注意,如果没有结果,您将得到一个IndexError因为re.findall将简单地返回一个空列表。

于 2012-11-15T22:32:14.213 回答
0

这可能对您有用:

f=urllib.urlopen('results.html')
s = str(f.read())
email = re.compile('<div class="e_mail">(.*?)</div>', re.DOTALL).findall(s)
return email[0]

在返回之前还要确保它不是一个空列表。

于 2012-11-15T22:31:20.663 回答