2015-03-30 34 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