0

我很抱歉标题,我不知道如何正确地问这个问题。

我想使用 python2.7 的re库来解析一个 HTML 文件。我知道我应该使用 BeautifulSoup 或类似的东西进行解析,但这并不重要。

这个 HTML 文件中有一个部分:<br>(40%)</TD>. 在此示例中,数字(此处为40)不时更改。

我想用这个数字作为变量。为了做到这一点,我习惯于将re.split()之前的40所有内容和之后的所有内容分开40

html = getHtmlTextFromWebsite()
very_important_number = int(re.split("%\)</TD>", (re.split("<br>\(", html))[1])[0])

我发现这是一种非常麻烦的方法,我想知道是否有更好的方法。

4

4 回答 4

2

如果您只需要获得数字,则应使用match(第一次匹配)或 finditer(所有匹配)函数。

import re
p = re.compile("<br>\((\d+%)\)<\/TD>", re.IGNORECASE)
for m in p.finditer(html_code):
    print m.start(), m.group()

它还将为您提供找到的每个数字的位置。

于 2013-10-28T11:20:44.500 回答
1

这不是您问的正则表达式,但它会删除数字前后的所有内容:

very_important_number = int(html.strip("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%()<>br/"))

对于正则表达式,您可以使用re.match方法.

希望这可以帮助!

于 2013-10-28T11:25:50.107 回答
1

关于什么

r = re.compile(r'<br>\((\d+)%\)</TD>', re.I)
m = r.search(text)
print m.group(1)

在这里,您可以在整个文本中搜索此确切模式,并将其与其“环境”(匹配)一起获取。从比赛中,您现在提取组#1(()封闭的部分)。

您也可以在没有编译的 re 对象的情况下进行搜索

m = re.search(r'<br>\((\d+)%\)</TD>', text, re.I)
print m.group(1)
于 2013-10-28T11:26:08.397 回答
1

你可以试试这个

import re
html = getHtmlTextFromWebsite()
number = re.findall(r'<br>(.*?)%</br>', html)

打印号码:

print number[0]

40与示例文本一起打印。

于 2013-10-28T11:41:32.780 回答