在Perl中,如何将此CSV字符串中的字段放入没有空格的数组中?

Jua*_*uan 2 csv arrays perl split spaces

如果我有一个字符串,请说:

my $string = "A, B,C, D , E ";
Run Code Online (Sandbox Code Playgroud)

如何在没有前导和尾随空格的情况下将它放入Perl中的数组中?所以我想要的只是每个数组元素中只有一个字母.我目前做的是这样的:

my @groups = split /,\s*/, $string;
Run Code Online (Sandbox Code Playgroud)

但这显然是不够的,因为尾随空间仍然存在.任何帮助赞赏.非常感谢 !!

jam*_*san 7

然后在拆分前匹配前导/尾随空格并匹配拆分表达式中的前导/尾随空格.

my $string = " A, B,C, D , E ";
$string =~ s/^\s+//;
$string =~ s/\s+$//;
my @groups = split /\s*,\s*/, $string;
Run Code Online (Sandbox Code Playgroud)

但是,使用像Text :: CSV这样的模块可能比尝试自己的CSV解析更好.


Sin*_*nür 5

my @groups = map { s!^\s+!!; s!\s+$!!; $_ } split /,/, $string;
Run Code Online (Sandbox Code Playgroud)

要么

my @groups = $string =~ /([A-Z])/g;
Run Code Online (Sandbox Code Playgroud)

但是,除非输入真的像您所示的那样简单,否则最好使用Text :: CSVText :: xSV.

  • @Paul Nathan:因为我非常恼火,所以SO将`s /\s + $ //`中的尾部`//`视为注释字符并将其余部分灰显. (2认同)