2

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

my $string = "A, B,C, D , E ";

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

my @groups = split /,\s*/, $string;

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

4

5 回答 5

7

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

my $string = " A, B,C, D , E ";
$string =~ s/^\s+//;
$string =~ s/\s+$//;
my @groups = split /\s*,\s*/, $string;

不过,使用Text::CSV之类的模块可能比尝试自己解析 CSV 更好。

于 2009-11-11T20:51:35.683 回答
5
my @groups = map { s!^\s+!!; s!\s+$!!; $_ } split /,/, $string;

或者

my @groups = $string =~ /([A-Z])/g;

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

于 2009-11-11T20:54:19.280 回答
2

您不必将自己限制为split,只需使用带有/g修饰符的匹配即可。

my $string = " A, B,C, D , E ";
my @groups = $string =~ /\s*([^,]+?)\s*,?/g;
于 2009-11-11T21:16:20.677 回答
2

干得好:

@groups = split /,/, $string;
#remove whitespace now.
@groups = map { s/^\s+//; s/\s+$//; $_ } @groups;

注意:正则表达式可以简化我很确定,只是还没有解决。

于 2009-11-11T20:53:16.510 回答
1

只是为了确保我没有遗漏任何东西,在试图揭开你的例子之后,我想出了这个:

my $string = " A, B,C, D , E ";
$string =~ s/\s+//g;
my @groups = split /,/, $string;

我猜会工作吗?

于 2009-11-11T21:09:05.310 回答