Python 通过解析html文件查找数字

Python 通过解析html文件查找数字,python,regex,Python,Regex,这是一个特定的问题,但我有一个html文件(代码覆盖率数据),我想使用Python正则表达式查找文件中最后出现的百分比。我知道如何使用grep来实现它,但是我还没有成功地将它转换成Python 以下是有效的grep声明: grep -oP "(\d+(\.\d+)?(?=%))" coverage_results.html | tail -n1 这应该与后跟%符号的1或2位数字匹配。html中有多个数字与此匹配,所以我只想要最后一个。据我所知,甚至可能有一种方法可以做到这一点,而无需管道尾翼(

这是一个特定的问题,但我有一个html文件(代码覆盖率数据),我想使用Python正则表达式查找文件中最后出现的百分比。我知道如何使用grep来实现它,但是我还没有成功地将它转换成Python

以下是有效的grep声明:

grep -oP "(\d+(\.\d+)?(?=%))" coverage_results.html | tail -n1
这应该与后跟%符号的1或2位数字匹配。html中有多个数字与此匹配,所以我只想要最后一个。据我所知,甚至可能有一种方法可以做到这一点,而无需管道尾翼(可能与awk?),但这是我所能做到的

到目前为止,我的Python代码如下所示:

 searchfile = open("coverage_results.html", "r")
    for line in searchfile:
        if re.search("(\d+(\.\d+)?(?=%))", line, re.M | re.I):
            print line
一些示例输入:

html/api2/one.php</a></td><td>40</td><td>40</td><td>100%</td></tr><tr><td><a href="one.php.html">/var/lib/web/html/api2/two.php</a></td><td>114</td><td>117</td><td>97%</td></tr><tr><td><a href="two.php.html">/var/lib/web/html/api2/test.php</a></td><td>39</td><td>39</td><td>100%</td></tr><tr><td><a href="three.php.html">/var/lib/web/html/api2/test.php</a></td><td>55</td><td>55</td><td>100%</td></tr></table><p>Overall: 3461 / 5296 - 65%</p></body></html>
html/api2/one.php4040100%11411797%3939100%5555100%


如何仅返回字符串中匹配的部分?

看起来您正在打印搜索匹配的行。相反,如果您想要一些组,您的代码需要如下所示:

 searchfile = open("coverage_results.html", "r")
    for line in searchfile:
        regreturn = re.search("(\d+(\.\d+)?(?=%))", line, re.M | re.I)
        if regreturn is not None:
            print regreturn.groups()

我用AetherUnbound回答的一个变体解决了这个问题:

searchfile = open("coverage_results.html", "r")
for line in searchfile:
    regreturn = re.findall(r"\d+%", line, re.M | re.I)
    if regreturn is not None:
        print regreturn[-1]

期望的输出是什么?理想情况下,就是最后一个匹配的数字。因此,在示例输入中,我希望看到65%或65%返回。而且,一些
也可以。我可以使用这种方法只打印最后一个匹配的组吗?当然,因为
regreturn.groups
是一个元组,您可以执行
打印regreturn.groups()[-1]
。呃,所有
d+(?:\.\d+)(?=%)发生了什么事
stuff?它仍然可以工作,但这更简单,更容易快速阅读和理解。唯一的区别是,此解决方案返回的百分比包含1个或多个数字,而不是只有1或2个数字。应用程序不应受正则表达式的控制,以便于理解。如果你需要一个正则表达式,不妨学习如何使用它们,否则你将得不到好处。为了便于理解,开始编写和插入正则表达式,就像代码一样。而不是这些不可读的1行。