,如果我有一个字符串,说:在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