繁体   English   中英

Perl正则表达式问题

[英]Perl regular expression question

我想在用逗号分隔的行上使用Perl split函数,并在以逗号分隔的数组之间仅捕获两个或多个单词。 不需要单词。

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

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

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

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

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

演示脚本:

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的解决方案简洁,但可以使检查/处理特殊情况变得容易。

就像这样简单:

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

您本质上会丢弃从拆分中获得的前两个值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM