2011-03-28 41 views
1

我想在逗號分隔的行上使用Perl分割函數,並且只能在分隔到數組中的逗號之間捕獲兩個或多個單詞。單詞不需要。Perl的正則表達式問題

例如,該行 - >> AAA,CCC DDD,EEE,FFF GGG UUU, 我只希望,ccc ddd and fff ggg uuu

while(<FH>) 
{ 
    @ = split(/,/); 
} 

回答

1

更新:增加了 「AAA」 的保護,」, 「保護也是如此。

$line =~ s/^\s+|\s+$//g; # or you get false positives 
my @multiword = grep {/\s/} split /\s*,[,\s]*/, $line; 

拆分會吃掉逗號周圍的所有空間,因此包含空格的數組中的任何內容都是多字。

+0

它沒有做我想做的事情,我想單個多字詞,而不是包含單個和多個單詞的整個行...... – 2011-03-28 11:53:58

+0

感謝Dallaylaen的變化和不清楚。它根據需要工作。再次感謝 – 2011-03-28 12:10:50

1

演示腳本:

my @data = (
    'aaa, ccc ddd, eee, fff ggg uuu' 
    , ' aaa bbb ,ccc,eee,fff ggg uuu ' 
    , 'aaa,ccc,eee,fff' 
); 
for my $line (@data) { 
    printf "|%s| ==> \n", $line; 
    $line =~ s/^\s+|\s+$//g; 
    my @cut = grep {// } split(/\s*,\s*/, $line); 
    printf "|%s|\n\n", join('|', @cut); 
} 

輸出:

|aaa, ccc ddd, eee, fff ggg uuu| ==> 
|ccc ddd|fff ggg uuu| 

| aaa bbb ,ccc,eee,fff ggg uuu | ==> 
|aaa bbb|fff ggg uuu| 

|aaa,ccc,eee,fff| ==> 
|| 

小於Dallaylaen的解決方案簡潔,而且可以很容易地檢查/處理特殊情況。

+0

感謝您指出\ s *在行末和行首。 – Dallaylaen 2011-03-28 11:58:04

1

很簡單:

(民主,民主基金,@parsedvalues)=分流/,/

您esentialy扔掉你從斯普利特得到前兩個值。