,如果我有一個字符串,說:在Perl中,如何將這個CSV字符串中的字段放入一個不帶空格的數組中?
my $string = "A, B,C, D , E ";
我怎樣才能投入Perl中的數組這個沒有開頭和結尾的空格?所以我想要的只是每個數組元素中的單個字母。我目前做的是這樣的:
my @groups = split /,\s*/, $string;
但是,這顯然是不夠的,因爲尾隨空格仍然存在。任何幫助讚賞。非常感謝 !!
,如果我有一個字符串,說:在Perl中,如何將這個CSV字符串中的字段放入一個不帶空格的數組中?
my $string = "A, B,C, D , E ";
我怎樣才能投入Perl中的數組這個沒有開頭和結尾的空格?所以我想要的只是每個數組元素中的單個字母。我目前做的是這樣的:
my @groups = split /,\s*/, $string;
但是,這顯然是不夠的,因爲尾隨空格仍然存在。任何幫助讚賞。非常感謝 !!
然後剝去前/後間隔拆分之前和匹配在分裂表達的前/後間隔。
my $string = " A, B,C, D , E ";
$string =~ s/^\s+//;
$string =~ s/\s+$//;
my @groups = split /\s*,\s*/, $string;
使用像Text::CSV一個模塊可能比試圖做自己的CSV解析更好,雖然。
在這裏你去:
@groups = split /,/, $string;
#remove whitespace now.
@groups = map { s/^\s+//; s/\s+$//; $_ } @groups;
注:正則表達式可以簡化我敢肯定,只是還沒有制定出來呢。
my @groups = map { s!^\s+!!; s!\s+$!!; $_ } split /,/, $string;
或
my @groups = $string =~ /([A-Z])/g;
你爲什麼使用!作爲q {}分隔符,出於好奇? – 2009-11-11 20:58:41
@保羅森:因爲我變得非常惱火,SO治療後''//'中的S/\ s + $ //'作爲註釋字符並且灰線的其餘部分。 – 2009-11-11 21:01:14
@Sinan:有道理!它也使我煩惱。 – 2009-11-11 21:02:39
只是爲了確保我不是失去了一些東西,試圖揭穿你的例子後,我想出了這個:
my $string = " A, B,C, D , E ";
$string =~ s/\s+//g;
my @groups = split /,/, $string;
會工作,要麼我猜?
這會刪除所有空格,而不是逗號周圍的空白以及行首或行尾。例如,如果您有$ string =「Bob Jones,George Jetson,Foo Bar」,那麼您的代碼也會剝去單詞之間的空格。 – jamessan 2009-11-11 21:13:08
你不必限制自己split
,你只需要使用一個與之相匹配的/g
修改。
my $string = " A, B,C, D , E ";
my @groups = $string =~ /\s*([^,]+?)\s*,?/g;
討厭鬼。打敗我吧。 :-) – BlairHippo 2009-11-11 20:53:13
那個常見問題討論了修剪前/後空白,所以我不確定你想提請注意什麼。 – jamessan 2009-11-11 21:08:03
除非你的輸入是保證這個簡單,誰一直帶領你走向文本的鄉親:: CSV是正確的:你不希望自己解析它。如果數據中嵌入了任何逗號,這個簡單的拆分語句將會分解它不應該的字段。 – BlairHippo 2009-11-11 21:09:20