我想在逗号分隔的行上使用Perl分割函数,并且只能在分隔到数组中的逗号之间捕获两个或多个单词。单词不需要。Perl的正则表达式问题
例如,该行 - >> AAA,CCC DDD,EEE,FFF GGG UUU, 我只希望,ccc ddd and fff ggg uuu
while(<FH>)
{
@ = split(/,/);
}
我想在逗号分隔的行上使用Perl分割函数,并且只能在分隔到数组中的逗号之间捕获两个或多个单词。单词不需要。Perl的正则表达式问题
例如,该行 - >> 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的解决方案简洁,而且可以很容易地检查/处理特殊情况。
感谢您指出\ s *在行末和行首。 – Dallaylaen 2011-03-28 11:58:04
很简单:
(民主,民主基金,@parsedvalues)=分流/,/
您esentialy扔掉你从斯普利特得到前两个值。
它没有做我想做的事情,我想单个多字词,而不是包含单个和多个单词的整个行...... – 2011-03-28 11:53:58
感谢Dallaylaen的变化和不清楚。它根据需要工作。再次感谢 – 2011-03-28 12:10:50