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

本文和大家重点讨论一下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,按空格为界分开。

在perl手册里,有一个用法不多见。即: split /PATTERN/, EXPR, LIMIT; 关键就是这个LIMIT参数,可以节省不少事情。 如果使用了LIMIT,且是正数,表示分割成不多于LIMIT指定的数目的域。If LIMIT is unspecified or zero, trailing null fields are stripped (which potential users of pop would do well to remember). If LIMIT is negative, it is treated as if an arbitrarily large LIMIT had been specified. Note that splitting an EXPR that evaluates to the empty string always returns the empty list, regardless of the LIMIT specified.
通过制定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就只能用中间数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么你总是申请不到大额贷款?

有一个客户反映,近段接近年底,生意周转需要大量的资金,于是他找到了一家贷款公司申请贷款,可是贷款审批下来之后才发现,贷款公司给他批的额度只有2万元,与他心里预期的20万有很大的差距。于是他就怀疑&…

以太网通信协议

以太网通信协议 以太网数据格式

小心,信用卡销卡后,竟然变成黑名单!

信用卡现在很多人都在用,而且大部分人持有的卡片不仅仅一张,有很多人都是持有好几家银行的信用卡,但是卡多了有时候也是一种麻烦,稍微不留意就造成逾期了,因此有些人会选择把不常用的信用卡消掉。但是销卡有时候也不是…

verilog中的综合与不可综合

1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,f…

贷款被拒,因为你的征信黑洞太多

去贷款,征信大家都知道很重要,想要获得贷款审批,或者提高贷款额度,一个良好的信用必不可少。因此贷款被拒有很大的可能性是跟征信太差有关,如果征信记录上有以下信息,基本就跟贷款无缘了。(1&am…

信号输出库

信号输出库 文件及工作空间模块

学会放松,也是一项了不起的技能!

-1-读此文前先放一个小测试,大家不妨试一下,答案会在文末给出。写文已一年有余,但都停留在兴趣爱好的层面,虽说兴趣是最好的老师,但终究缺乏专业的培训。报名参加了土豆姐的书评写作课,希望可以系统地学习相…

数字IC设计经典书籍

1 《Verilog HDL高级数字设计》 中文版和原著。这本书本人以为是讲Verilog方面的最好的一本书,看完此书后,相信大家的code水平会有很大提高。书中例子及其丰富,涵盖了RISC、UART、异步FIFO、数字信号处理、乘法器和触发器,其中一章…

频分复用(Frequency Division Multiplexer)

作者:桂。 时间:2017年12月19日20:43:04 链接:http://www.cnblogs.com/xingshansi/p/8067839.html 前言 主要记录基本的频分复用原理,以及仿真实现。 一、频分复用原理 频分复用FDM: 通常x1..4(t)可以是同一个序列的串并转化&am…

MATLAB系统辨识

MATLAB系统辨识 最终效果:自动调出PID三项对应的参数,控制效果很不错。 目的:通过matlab,辨识出系统的传递函数,找到最理想的PID参数。 优点:1.节省“盲调PID”的时间。2.在辨识出传递函数后,…

AR模型与数据平稳性之间的关系

作者:桂。 时间:2017-12-19 21:39:08 链接:http://www.cnblogs.com/xingshansi/p/8068021.html 前言 前几天碰到一个序列分析的问题,涉及到自回归(auto-regression, AR)等模型,但如何确定序列…

开源EDA工具

1.来自kakuyou http://www.icarus.com/eda/verilog/ 开源的verilog 编译器,包含模拟器和基本逻辑综合模块。 http://www.geocities.com/SiliconValley/Campus/3216/GTKWave/gtkwave-win32.html windows版的gtk-wave,一个图形波形察看工具 http://em…

大学生每个月1500元的生活费,够吗?

-1-双十二刚过,朋友圈里便又刮起一阵“哭穷”的大风。曾看过一则新闻,一位来自浙江义乌的妈妈发帖说每月给女儿1200元生活费,被女儿质问自己是否是亲生的。上图是一张流传很广的大学生月消费支出表,加起来一共是1562元&#xff0c…

电脑卡顿怎么办?

电脑卡顿怎么办? 电脑主要由CPU,内存,硬盘,显卡,声卡,主板,显示器各种连接线等组成。 CPU:中文名字叫中央处理器,是电脑的大脑,各种数据的处理运算控制。有…

我的2017,关于读书的一点心得

-1-2017年,读了40多本书,跟那些动辄一天一本书的大神相比,这个数目并不算多,但于我而言已经是一个很大的进步,但常常还会焦虑,觉得自己跟别人的差距越拉越大。为什么我的读书速度这么慢? 为什么…

自控原理之系统辨识

自控原理之系统辨识 前沿 数学模型是一个或多或少,以一定的形式表达出你正在观测的事物。**通过观测事物的各项属性,推断出一个数学模型,这是科学。**系统辨识,着手从观测事物得到的数据中,建立一个数学模型。正由于物…

马云狂炸近百亿,你的借呗额度涨了吗?

蚂蚁借呗非常受大家欢迎,因为简单方便,所以很多缺钱的朋友都会通过借呗去借钱。但是借呗的额度主要以小额为主,很多时候满足不了日常的资金需求,因此很多朋友都在想各种方法去提高借呗的额度。但是借呗的额度不是想提高就可以提高…

贷款中介市场要变天了吗?

贷款中介一直是贷款市场一股很重要的力量,他们对各个贷款机构的渗透率很高,贷款中介也确实帮助了很多想贷款的客户,同时也减轻了贷款机构的一些业务压力,甚至有些银行等贷款机构直接把贷款业务外包给了第三方中介结构。可以说贷款…

将数据导入到MATLAB

将数据导入到MATLAB 将数据导入到MATLAB中有二种方式。 第一种:直接使用MATLAB读Excel文件 例如 Excel表格 numxlsread(data1.xlsx,Sheet1,A1:E13);%读入Excel文件 input_trainnum(1:8,1:4);%1到8行,1到4列 output_trainnum(1:8,5);%1到8行&#xff0…

重磅!四部委发文,以后买房可以省几十万元!

去买房,能用公积金贷款的绝不考虑商业贷款,能用商业贷款的绝对不会全款买房。但对于开发商来说,事实却恰好相反,网上就流行了一个段子:买房全款的往里走;按揭的不要堵门口;公积金贷款的把共享单…