仅使用 python 正则表达式从最新的字符串中获取

Posted

技术标签:

【中文标题】仅使用 python 正则表达式从最新的字符串中获取【英文标题】:Only take from the latest string with python regex 【发布时间】:2014-01-10 20:37:51 【问题描述】:

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

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

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

 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 版

【问题讨论】:

不是您要问的问题,但 . 匹配除换行符以外的任何内容。这包括空格。你确定你的正则表达式能捕捉到你想要的吗? 您可以添加行尾$ 锚点。 last = re.search(r'(.*%) (.*) (.*) / (.*) (M) (.*) (.*)$', s).group() 【参考方案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] 以获取最后一行并将您的正则表达式应用于其上。这种方法有两个好处:

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

【讨论】:

我运行了你的解决方案,但是没有数据,结果是''分裂。 尝试使用splitlines() 而不是split('\n')。你确定你的字符串中有\n吗?【参考方案2】:

您的正则表达式中仅显示 3 个文字,%/M。 如果括号被删除,你的正则表达式变成.*%.*.*/.*M.*.* 减少到.*%.*/.*M.*

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

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

(?-s) 修饰符确保点不匹配换行符(通常是默认值)。 并且,请确保使用 Multi-Line 修饰符(通常是默认值) 这样$ 表示字符串结束。

添加您的群组以获取您想要的内容。

【讨论】:

以上是关于仅使用 python 正则表达式从最新的字符串中获取的主要内容,如果未能解决你的问题,请参考以下文章

从正则表达式仅返回部分匹配项

从正则表达式仅返回部分匹配项

正则表达式仅从字符串中获取 NUMBER

如何使用正则表达式从字符串中删除字符串和特殊字符并仅显示不带逗号的数字?

仅使用正则表达式从 long strong 中检索第 12 到第 14 个字符 - Grafana 变量

使用正则表达式仅获取某个字符(#)之后的数字[关闭]