如何从数组元素中删除前导和尾随空格?

时间:2010-07-07 07:19:13

标签: perl

我有一个包含字符串的数组,该字符串可能包含附加到末尾的空格。我需要使用perl脚本删除这些空格。我的数组看起来像这样

@array = ("shayam    "," Ram        "," 24.0       ");

我需要输出

@array = ("shayam","Ram","24.0");

我尝试了chomp (@array)。它没有使用字符串。

6 个答案:

答案 0 :(得分:34)

基本问题围绕从字符串中删除前导和尾随空格,并且已经以某种形式在几个线程中回答了以下正则表达式替换(或其等价物):

s{^\s+|\s+$}{}g foreach @array;

chomp数组将仅删除尾随输入记录分隔符(默认为"\n")。它不是为了删除尾随空格而设计的。

来自perldoc -f chomp

  

当您担心最终记录可能缺少其换行符时,它通常用于从输入记录的末尾删除换行符。在段落模式($/ = "")中,它会从字符串中删除所有尾随换行符。

     

...

     

如果你选择一个列表,每个元素都会被选中,并且会返回删除的字符总数。

答案 1 :(得分:1)

#!/usr/local/bin/perl -w

use strict;
use Data::Dumper;

my @array=('a ', 'b', '  c');

my @newarray = grep(s/\s*$//g, @array);

print Dumper \@newarray;

这里的关键功能是grep(),其他一切都只是demo gravy。

答案 2 :(得分:1)

怎么样: @array = map {join(' ', split(' '))} @array;

答案 3 :(得分:1)

这里评价最高的答案看起来不错,但恕我直言,并不是那么容易阅读。我添加了一个带有内部空格的字符串,以显示那些未删除的字符串。

#!/usr/bin/perl

use strict;
use warnings;

my @array = ("shayam    "," Ram        "," 24.0       ", " foo bar garply  ");

map { s/^\s+|\s+$//g; } @array;

for my $element (@array) {
    print ">$element<\n";
}

输出:

>shayam<
>Ram<
>24.0<
>foo bar garply<

答案 4 :(得分:-1)

my @res = ();
my $el;

foreach $el (@array) {
   $el =~ /^\s*(.*?)\s*$/;
   push @res, $1;
}

在此之后,@ are将包含您想要的元素。

答案 5 :(得分:-2)

我认为Borealid的例子应该是:

my @array = ("shayam "," Ram "," 24.0 ");
foreach my $el (@array) {
   $el =~ s/^\s*(.*?)\s*$/\1/;
}