2015-03-30 61 views
0

我有以下的輸出:Perl的正則表達式忽略特定關鍵字

22.0 MiB + 27.1 MiB = 49.2 MiB  process1 
78.9 MiB + 636.5 KiB = 79.5 MiB  process2 

我需要最後一個欄,所以我用下面的正則表達式,我把(XX MIB值和processX兩個組$ 1和$ 2)

/([^=]+)\s([a-z].*)/ 

結果:

49.2 MiB 
79.5 MiB 

我想忽略/在正則表達式組中刪除MiB我如何刪除?

回答

1

可以使用,

=\s*(\d+\.\d+)\s*\w+\s*(\w+) 

Working demo

+0

精湛!我把你的正則表達式,它的工作原理! – Satish 2015-03-30 21:55:11

+0

更加健壯:'= \ s *(\ S +)\ s + \ S + \ s +(。*)' – ikegami 2015-03-30 22:18:37

0

只是不要捕捉你不想讓什麼:

#!/usr/bin/perl 
use warnings; 
use strict; 

while (<DATA>) { 
    /= \s* ([0-9.]+) \s MiB/x and print $1, "\n"; 
} 

__DATA__ 
22.0 MiB + 27.1 MiB = 49.2 MiB  process1 
78.9 MiB + 636.5 KiB = 79.5 MiB  process2 
+0

@ apgp88和您同時回答了答案,您都很棒,但我會回答'apgp88'直接命中解決方案: – Satish 2015-03-30 21:57:17

0

試試這個:

if ($_ =~ /(=\s+)(.*[\d\.]+)/) { 
     print "$2\n"; 
    }; 
+0

@choroba,謝謝 – michael501 2015-03-30 22:01:27

0
m{ = ([0-9]+ (?: [.][0-9]+)?) \s+ \S+ \s+ (\S+) }x