Как я могу удалить начальные и конечные пробелы из элементов массива? - PullRequest
8 голосов
/ 07 июля 2010

У меня есть массив, который содержит строку, которая может содержать пробелы, добавленные в конец.Мне нужно удалить эти пробелы с помощью сценария Perl.мой массив будет выглядеть так

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

Мне нужен вывод как

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

Я пытался с chomp (@array).Не работает со строками.

Ответы [ 6 ]

34 голосов
/ 07 июля 2010

Основной вопрос вращается вокруг удаления начальных и конечных пробелов из строк, и на него дан ответ в нескольких потоках в той или иной форме со следующей заменой регулярного выражения (или ее эквивалентом):

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

chomp В массиве будут удалены только конечные разделители входных записей ("\n" по умолчанию). Он не предназначен для удаления конечных пробелов.

С perldoc -f chomp:

Он часто используется для удаления новой строки из конца входной записи, когда вы беспокоитесь, что в окончательной записи может отсутствовать новая строка. В режиме абзаца ($/ = "") он удаляет все завершающие символы новой строки из строки.

...

Если вы разбиваете список, каждый элемент разбивается на части, и возвращается общее количество удаленных символов.

1 голос
/ 12 мая 2017

Ответ с самым высоким рейтингом здесь выглядел хорошо, но, ИМХО, не так легко читать, как могло бы быть. Я добавил строку с внутренними пробелами, чтобы показать, что они не удалены.

#!/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<
1 голос
/ 27 ноября 2013

Как насчет: @array = map {join(' ', split(' '))} @array;

1 голос
/ 07 июля 2010
#!/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 (), все остальное - просто демонстрационный соус.

0 голосов
/ 07 июля 2010

Я думаю, что пример Бореалида должен быть:

my @array = ("shayam "," Ram "," 24.0 ");
foreach my $el (@array) {
   $el =~ s/^\s*(.*?)\s*$/\1/;
}
0 голосов
/ 07 июля 2010
my @res = ();
my $el;

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

После этого @res будет содержать нужные вам элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...