仅使用 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 正则表达式从最新的字符串中获取的主要内容,如果未能解决你的问题,请参考以下文章
如何使用正则表达式从字符串中删除字符串和特殊字符并仅显示不带逗号的数字?