2014-10-03 52 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