Ruby正则表达式从特定行获取百分比

时间:2018-05-09 00:56:03

标签: ruby regex

我有以下输出:

Name                              Stmts   Miss  Cover   Missing
---------------------------------------------------------------
src/global_information.py             8      1    88%   6
src/settings.py                      38      0   100%
src/storage_backends.py               4      4     0%   1-5
src/urls.py                           8      0   100%
users/admin.py                        1      0   100%
users/apps.py                         3      3     0%   1-5
users/forms.py                        5      0   100%
users/models.py                       1      0   100%
users/tests/tests_views_urls.py       5      0   100%
users/urls.py                         5      0   100%
users/views.py                        1      1     0%   1
---------------------------------------------------------------
TOTAL                                79      9    89%

我需要得到TOTAL百分比,即89%。我尝试以下两个正则表达式:

TOTAL\s+\d+\s+\d+\s+\d+\%

(?<=TOTAL\s).*

我可以获得正确的行,但不知道如何提取它的百分比部分。这需要以正则表达式实现,因为我无权访问任何工具

由于

3 个答案:

答案 0 :(得分:2)

你可以使用这样的正则表达式:

TOTAL.*?(\d+)%

<强> Working demo

或者如果你想捕捉%那么

TOTAL.*?(\d+%)

然后从抓取组$1

中抓取内容

答案 1 :(得分:1)

str=<<_
Name                              Stmts   Miss  Cover   Missing
---------------------------------------------------------------
src/global_information.py             8      1    88%   6
src/settings.py                      38      0   100%
src/storage_backends.py               4      4     0%   1-5
src/urls.py                           8      0   100%
users/admin.py                        1      0   100%
users/apps.py                         3      3     0%   1-5
users/forms.py                        5      0   100%
users/models.py                       1      0   100%
users/tests/tests_views_urls.py       5      0   100%
users/urls.py                         5      0   100%
users/views.py                        1      1     0%   1
---------------------------------------------------------------
TOTAL                                79      9    89%
_

str[/^TOTAL.*?\K\d+%/] #=> "89%

\K意味着放弃到目前为止匹配的所有内容。需要?中的非贪婪修饰符.*?。如果没有它,\K之前的匹配将以总百分比中的倒数第二位数结尾(此处为"8"中的"89%""3"中的"1234%" })。

答案 2 :(得分:0)

awk '/TOTAL/{ print $4}' <INPUT_FILE>