2013-02-15 56 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