我很抱歉这个头衔,我不知道如何正确地问这个。
我想使用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])
我发现这是一种非常麻烦的方法,我想知道是否有更好的方法。
答案 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
。