Perl正则表达式问题

时间:2011-03-28 10:33:51

标签: regex perl

我想在逗号分隔的行上使用Perl split函数,并且只逗写分隔成数组的逗号之间的两个或多个单词。不需要单个单词。

例如,此行 - >> aaa,ccc ddd,eee,fff ggg uuu, 我只想要,ccc ddd and fff ggg uuu

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

3 个答案:

答案 0 :(得分:1)

更新:添加了“aaa”,保护和“,,”保护。

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

分割将占用逗号周围的所有空间,因此数组中包含空格的任何内容都是多字的。

答案 1 :(得分: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的解决方案简洁,但可以轻松检查/处理特殊情况。

答案 2 :(得分:1)

这很简单:

  

(undef,undef,@ parsedvalues)= split /,/

你实际上扔掉了从分裂中获得的前两个值。