[英]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.