我想在逗号分隔的行上使用Perl split函数,并且只逗写分隔成数组的逗号之间的两个或多个单词。不需要单个单词。
例如,此行 - >> aaa,ccc ddd,eee,fff ggg uuu,
我只想要,ccc ddd and fff ggg uuu
while(<FH>)
{
@ = split(/,/);
}
答案 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 /,/
你实际上扔掉了从分裂中获得的前两个值。