我需要從正規表示式中的 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

那你嘗試了什麼,

我建議看看敏捷文字, 相當容易使用

我不完全理解您的問題,但我在這裡創建了一個片段以進一步提供幫助。

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

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

希望有幫助

相關內容