我想在逗號分隔的行上使用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