2011-03-28 43 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扔掉你从斯普利特得到前两个值。