如何在不使用re.split()的情况下才能使用正则表达式?

时间:2013-10-28 11:14:44

标签: python regex python-2.7

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

我想使用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 个答案:

答案 0 :(得分:2)

如果你需要的只是拥有号码,你应该使用match(第一场比赛)或发现者(所有比赛)功能。

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

它还会为您提供找到的每个号码的位置。

答案 1 :(得分:1)

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

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

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

希望这有帮助!

答案 2 :(得分:1)

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

在这里,您可以search了解整个文本中的确切模式,并将其与“环境”(匹配)一起使用。从匹配中,您现在提取组#1(()封闭的部分)。

你也可以search without a compiled re object

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

答案 3 :(得分:1)

你可以试试这个

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

打印号码:

print number[0]

使用示例文本打印40