我需要用正则表达式从 MSI Afterburner 日志文件的最后一行中提取一个特定的数字

我需要用正则表达式从 MSI Afterburner 日志文件的最后一行中提取一个特定的数字

我对正则表达式一无所知,但我需要能够从打印如下的日志的最后一行中选择值:

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,354.000             ,405.000 

我需要一个正则表达式来抓取此实例中 354.000(100 到 9999 之间的数字)的位置,如下所示:

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,**354**.000             ,405.000 

以及一个正则表达式,它将抓取此实例中 405 的位置,如下所示:

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,354.000             ,**405**.000 

我正在使用一个名为 CrystalControl2 的程序在外部 LCD 屏幕上显示来自我电脑的信息。程序内置的工具用于从文本文件或 html 页面中抓取信息,需要使用正则表达式从未过滤的源信息中提取结果。

更具体地说,日志文件在文本文件中添加了一行,其中包含我每秒突出显示一次的位置的 GPU 核心时钟和内存时钟。我想提取这些更新的值并通过 CrystalControl2 将它们显示在 LCD 屏幕上的字段中。我试图在不安装其他更容易从 CrystalControl2 访问的软件的情况下获取这些值,以避免软件冲突以及运行一些不同的程序来引用我想要在 LCD 上显示的所有信息

就像我说的,这些数字可以是 3 位或 4 位数字……这可能吗?

答案1

因此,显然 CrystalControl2 正则表达式格式的文档严重不足。但从我查看非常我能找到的几个例子,它们使用分组来提取所需的文本。有些比其他的分组多,我不清楚为什么。但这里有一个正则表达式的破解,可以匹配 MSI Afterburner 日志中的数字。

\D+(\d+)\.[^,]*,[^0-9,]*(\d+)\.[^,]*$

如何?

让我们来分解一下。我们将从末尾开始向后工作,因为我们有一个行尾锚点 ( $)

  1. $- 锚定到线的末端。

    尽管从例子中我看到这锚定在文件的末尾。

  2. [^,]*- 匹配零个或多个任意内容逗号

  3. \.- 匹配一个点(小数点)。

    \必需的,因为.在正则表达式中是特殊的,表示匹配任何内容。 使其\成为一个点。

  4. (\d+)- 匹配一个或多个数字,并将它们与 分组()

    该组允许提取比赛结果。

  5. ,[^0-9,]*- 匹配逗号后跟零个或多个非数字或逗号

  6. \.[^,]*- 查找一个点,后面跟着零个或多个非逗号

  7. \D+(\d+)- 查找一个或多个非数字,后跟一个或多个数字,并将数字分组

测试:

由于我无法访问 LCD 或其软件,因此我使用 perl 进行测试,如下所示:

cat file1 | perl -lpe 's/\D+(\d+)\.[^,]*,[^0-9,]*(\d+)\.[^,]*$/:::: \1 xxx \2/'

检测结果:

80, 21-06-2017 20:42:27, 16.000:::: 1392 xxx 4714
80, 21-06-2017 20:42:28, 6.000:::: 860 xxx 810
80, 21-06-2017 20:42:29, 7.000:::: 860 xxx 810
80, 21-06-2017 20:42:30, 7.000:::: 354 xxx 405

:::因此正则表达式找到了行上的最后两个数字,如和之间所示xxx

根据评论更新结果

结果

答案2

那你试过什么呢?

我建议看看NimbleText, 相当容易使用

我不完全了解您的问题,但我在这里创建了一个代码片段来进一步提供帮助。

http://nimbletext.com/Live/-176683481/

<% ($3 > 100 && $3 < 9999) ? $3 : '' %> | <% ($4 > 100 && $4 < 9999) ? $4 : '' %>

希望有帮助

相关内容