2014-10-03 78 views
0

試圖分裂一些數字如下所示:拆分符合特殊字符

$line = "6 13  2"; 

@a = split(/\s+/, $line) 

但沒有奏效。原來空白不是簡單的白色空間,vim編輯告訴我白色空間實際上有兩個字節\ 20 \ 02。

我試圖預處理下面的行,但它似乎沒有工作。

$line =~ s/\x02//g; 

任何想法如何分裂它?

在此先感謝!

+0

的'$線=〜S/\ X02 // g'爲我工作。有沒有更多時髦的角色你沒有考慮? – 2014-10-03 15:28:16

+0

這是一個Unicode U + 2002(EN SPACE),從UTF-8判斷我可以從瀏覽器中複製並分析。你需要使用一個命名的字符類來分割,我想(並且正在使用Unicode'enabled')。 – 2014-10-03 15:39:43

回答

3

使用Data::Dump檢查你的數據:

use Data::Dump; 

$line = "6 13  2"; 

dd $line; 

輸出:

pack("H*","36e280823133e28082e2808232") 

或許更有幫助:

use Data::Dump; 

$line = "6 13  2"; 

dd split //, $line; 

輸出:

(
    6, 
    "\xE2", 
    "\x80", 
    "\x82", 
    1, 
    3, 
    "\xE2", 
    "\x80", 
    "\x82", 
    "\xE2", 
    "\x80", 
    "\x82", 
    2, 
) 

看起來你有一些編碼問題需要處理。

更改爲utf8

use strict; 
use warnings; 
use utf8; 

use Data::Dump; 

my $line = "6 13  2"; 

dd split /\s+/, $line; 

輸出:

(6, 13, 2) 
+0

非常感謝! 「使用utf8;」發揮了魔力。 – packetie 2014-10-03 16:15:48

+0

注意,這隻會影響源代碼的編碼。如果您要從外部來源提取數據,您仍然需要處理該編碼。 – Miller 2014-10-03 17:00:51

+0

@codingFun,'use utf8;'告訴Perl源代碼使用UTF-8編碼。 – ikegami 2014-10-03 18:00:51