我对正则表达式一无所知,但我需要能够从打印如下的日志的最后一行中选择值:
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+)\.[^,]*$
如何?
让我们来分解一下。我们将从末尾开始向后工作,因为我们有一个行尾锚点 ( $
)
$
- 锚定到线的末端。尽管从例子中我看到这锚定在文件的末尾。
[^,]*
- 匹配零个或多个任意内容但逗号\.
- 匹配一个点(小数点)。是
\
必需的,因为.
在正则表达式中是特殊的,表示匹配任何内容。 使其\
成为一个点。(\d+)
- 匹配一个或多个数字,并将它们与 分组()
。该组允许提取比赛结果。
,[^0-9,]*
- 匹配逗号后跟零个或多个非数字或逗号\.[^,]*
- 查找一个点,后面跟着零个或多个非逗号\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 : '' %>
希望有帮助