阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Perl split字符串分割函数用法指南

55次阅读
没有评论

共计 2030 个字符,预计需要花费 6 分钟才能阅读完成。

导读 本文向大家简单介绍一下 Perl split 函数的用法,Perl 中的一个非常有用的函数是 Perl split 函数 - 把字符串进行分割并把分割后的结果放入数组中。

本文和大家重点讨论一下 Perl split 函数的用法,Perl 中的一个非常有用的函数是 Perl split 函数 - 把字符串进行分割并把分割后的结果放入数组中。这个 Perl split 函数使用规则表达式(RE),如果未特定则工作在 $_变量上。

Perl split 函数

Perl 中的一个非常有用的函数是 Perl split 函数 - 把字符串进行分割并把分割后的结果放入数组中。这个 Perl split 函数使用规则表达式(RE),如果未特定则工作在 $_变量上。

Perl split 函数可以这样使用:

$info="Caine:Michael:Actor:14,LeafyDrive"; 
@personal=split(/:/,$info);

其结果是:@personal=("Caine","Michael","Actor","14,LeafyDrive");
◆如果我们已经把信息存放在 $_变量中,那么可以这样:

@personal=split(/:/);

如果各个域被任何数量的冒号分隔,可以用 RE 代码进行分割:

$_="Capes:Geoff::Shotputter:::BigAvenue"; 
@personal=split(/:+/);

其结果是:@personal=(“Capes”,”Geoff”,”Shotputter”,”BigAvenue”);

但是下面的代码:

$_="Capes:Geoff::Shotputter:::BigAvenue"; @personal=split(/:/);

的结果是:@personal=("Capes","Geoff","","Shotputter","","","BigAvenue");

这个 Perl split 函数中单词可以被分割成字符,句子可以被分割成单词,段落可以被分割成句子:

@chars=split(//,$word);
@words=split(//,$sentence); 
@sentences=split(/\./,$paragraph);

在第一句中,空字符串在每个字符间匹配,所以 @chars 数组是一个字符的数组。>>

// 之间的部分表示 split 用到的正则表达式(或者说分隔法则)
\s 是一种通配符,代表空格
+ 代表重复一次或者一次以上。
所以,\s+ 代表一个或者一个以上的空格。
split(/\s+/,$line)表示把字符串 $line, 按空格为界分开。
比如说,$line=” 你好朋友欢迎光临我的网站 jb51.net”;
split(/\s+/,$line)后得到:
你好朋友欢迎访问我的网站 jb51.net

一般用法:@somearray = split(/:+/, $string); #括号可以不要。若不指定 $string, 则对默认变量 $_操作,两斜线间为分割符,可以用正则表达式,强悍异常。

在 perl 手册里,有一个用法不多见。即:split /PATTERN/, EXPR, LIMIT;关键就是这个 LIMIT 参数,可以节省不少事情。如果使用了 LIMIT,且是正数,表示分割成不多于 LIMIT 指定的数目的域。

通过制定 LIMIT,可以在很长 (分割产生几万个元素 or 域) 的行分割操作中,只返回关键的前几列的域值,减少了内存使用及时间消耗。比如一般的基因型数据,第一列通常是材料命名,需要通过材料名的判断取舍,这时候就可以这样用。my ($firstfield) = split /\t/, $someline, 1; 如果需要前面几列的值,这样的方式对大文件效率很好:my(undef, $var1, undef, undef, undef, $var2)=split /\t/, $someline, 6;

有网友对这种方式做了测试,显示较好。引用如下:
一个文件,每行都有 18 项,各项之间用 \t 分割,使用时用到了第 6 项,折腾了几种用法

复制代码代码如下:

my @array = split("\t",$_); my $var = $array[6];   测试文件平均用时 8.2s
 my($var) = (split("\t",$_))[6];  测试平均用时 5.1s
 my(undef,undef,undef,undef,undef,undef,$var) = split("\t",$_); 平均用时 3.53s
 my(undef,undef,undef,undef,undef,undef,$var) = split("\t",$_,7); 平均用时 3.52s
 my $var = (split("\t",$_,7))[6]; 平均用时 3.53s
看来后 3 种才是王道,如果需要使用多项也可以进行进行适当的变动。不过两项如果跨度比较大,3,4 应该是不错选择,5 就只能用中间数组。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2030字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中