只使用python正则表达式的最新字符串

时间:2013-12-22 13:09:38

标签: python regex linux string python-2.7

我在Python应用程序中使用正则表达式。

我使用正则表达式运行的字符串包含许多行。

String(我使用的字符串的一部分):

 36% [============>                      ]  55.5 /  86.2 M   426.62 K   1m14s
 36% [============>                      ]  55.5 /  86.2 M   426.62 K   1m14s
 36% [============>                      ]  55.5 /  86.2 M   426.62 K   1m14s
 36% [============>                      ]  55.5 /  86.2 M   426.62 K   1m14s
 36% [============>                      ]  55.8 /  86.2 M   278.57 K   1m52s
 36% [============>                      ]  55.8 /  86.2 M   278.57 K   1m52s
 36% [============>                      ]  55.8 /  86.2 M   278.57 K   1m52s
 36% [============>                      ]  56.2 /  86.2 M   426.19 K   1m12s
 36% [============>                      ]  56.2 /  86.2 M   426.19 K   1m12s
 36% [============>                      ]  56.2 /  86.2 M   426.19 K   1m12s
 36% [============>                      ]  56.7 /  86.2 M   504.32 K   1m 0s
 36% [============>                      ]  56.7 /  86.2 M   504.32 K   1m 0s
 36% [============>                      ]  56.7 /  86.2 M   504.32 K   1m 0s
 36% [============>                      ]  57.1 /  86.2 M   409.67 K   1m13s
 36% [============>                      ]  57.1 /  86.2 M   409.67 K   1m13s
 36% [============>                      ]  57.1 /  86.2 M   409.67 K   1m13s[2K
 36% [============>                      ]  57.6 /  86.2 M   453.01 K   1m 5s[2K
 36% [============>                      ]  57.6 /  86.2 M   453.01 K   1m 5s

字符串来自文件。

我使用这个(Python)正则表达式:

(.*%) (.*) (.*) / (.*) (M) (.*) (.*)

当我从re(Python正则表达式库)获取数据时,只打印第一行的数据。

我想要最后一行的数据。

更多详情:

我使用的是GNU / Linux和Python 2.7.5版本

2 个答案:

答案 0 :(得分:1)

正如你所说,你想要最后一行的数据,而你正在使用正则表达式。因此,您应首先从字符串中删除您不想要的所有内容。

让我们将content变量定义为:

 content = '36% [============>                      ]  55.5 /  86.2 M   426.62 K   1m14s
 36% [============>                      ]  55.5 /  86.2 M   426.62 K   1m14s
 36% [============>                      ]  55.5 /  86.2 M   426.62 K   1m14s
 [...]'

在这种情况下,您应该content.splitlines()[-1]获取最后一行并在其上应用正则表达式。这种方法有两个好处:

  1. 你会得到预期的结果。
  2. 它会更快,因为正则表达式将在较小的字符串上执行。

答案 1 :(得分:0)

您只在正则表达式中显示3个文字,%/M
如果移除了这些内容,则您的正则表达式会变为.*%.*.*/.*M.*.*
减少到.*%.*/.*M.*

如果您只想要包含%/M的最后一行,请将其更改为

(?-s).*%.*/.*M.*\s*$

(?-s)修饰符确保Dot与换行符不匹配(通常是默认值) 并且,确保使用多线修改器(通常是默认值)
这样$表示字符串结束。

添加您的群组以捕捉您想要的内容。