Perl split字串分割函式用法指南

大雄45發表於2023-01-08
導讀 本文向大家簡單介紹一下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就只能用中間陣列。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2887662/,如需轉載,請註明出處,否則將追究法律責任。

相關文章