2013-02-15 63 views
0

我试图解析以下行的最后一个块中最后一次出现:的Perl - 解析空白

77  0  wl1271/wpa_supplicant_lib/driver_ti.h 

不幸的是,空间并不总是相同的长度。我假设printf或类似的东西被用来输出数据,所以它列在列中。这意味着有时我有空格,有时候我有制表符。

我已经成功地通过在perl中使用正则表达式得到了前两个数字。我想我会得到最后一点的方式是搜索任何空白字符的最后一次出现,然后抓住从那里开始的字符串的其余部分。我尝试使用rindex,但只接受一个字符的搜索参数,而不是一个正则表达式(我认为\s会做的伎俩)。

任何人都可以解决我在这里通过走过我如何获得最后的空白字符或帮助我解决方案来抓住字符串一些其他方式的问题?

+0

也许只是删除最后的空白? (或空格)?你关心他们的原因是什么? 'S/\ s + $ //; #farewell,whitespace' – gaussblurinc 2013-02-15 13:55:07

回答

4

为什么不是split

use strict; 
use warnings; 

my $string = '77  0  wl1271/wpa_supplicant_lib/driver_ti.h'; 
my ($num1, $num2, $lastPart) = split ' ', $string; 

print "$num1\n$num2\n$lastPart"; 

输出:

77 
0 
wl1271/wpa_supplicant_lib/driver_ti.h 
+0

因为它并不总是空格。有时它会使用不同长度和标签的标签。文件中的行数比粘贴在这里的要多。 – user1897691 2013-02-15 03:45:37

+0

@ user1897691 - 'split'''分割为空格,包括制表符。这对此很有效。 – Kenosis 2013-02-15 03:46:58

+0

真的吗?我没有意识到这一点。非常感谢你! – user1897691 2013-02-15 03:50:12

2

为什么不直接匹配正则表达式\S+$ - 即字符串中最后一组非空白字符?

  • \S =非空白字符线
  • $ =结束

编辑:你真的应该使用split不过,通过虚己的建议。

+2

如果可能有尾随空白,你可以使用'\ S + \ s * $'。 – 2013-02-15 03:26:29

+0

我注意到你使用'$'表示字符串的结尾。如果不清楚,请告诉我,但是我在0之后但在'wl1271/wpa_supplicant_lib/driver_ti.h'之前寻找空格。文件名是我试图解析出来的字符串。编辑:哦!你正在使用'\ S'(首都)。我没有注意到。谢谢:D – user1897691 2013-02-15 03:29:10

+0

@ user1897691没问题。 :) – Amber 2013-02-15 03:30:49