Perl: функция для обрезки начальных и конечных пробелов - PullRequest
77 голосов
/ 04 января 2011

Есть ли встроенная функция для обрезки начальных и конечных пробелов, так что trim(" hello world ") eq "hello world"?

Ответы [ 10 ]

82 голосов
/ 04 января 2011

Вот один подход с использованием регулярного выражения:

$string =~ s/^\s+|\s+$//g ;     # remove both leading and trailing whitespace

Perl 6 будет включать функцию обрезки:

$string .= trim;

Источник: Википедия

80 голосов
/ 04 января 2011

Доступно в String :: Util с методом trim:

Примечание редактора: String::Util не является основным модулем, но вы можете установить его из CPAN с [sudo] cpan String::Util.

use String::Util 'trim';
my $str = "  hello  ";
$str = trim($str);
print "string is now: '$str'\n";

печать:

строка теперь "привет"

Однако сделать это самостоятельно достаточно просто:

$str =~ s/^\s+//;
$str =~ s/\s+$//;
26 голосов
/ 04 января 2011

Нет встроенной функции trim, но вы можете легко реализовать свою собственную, используя простую подстановку:

sub trim {
    (my $s = $_[0]) =~ s/^\s+|\s+$//g;
    return $s;
}

или используя неразрушающую подстановку в Perl 5.14позже:

sub trim {
   return $_[0] =~ s/^\s+|\s+$//rg;
}
9 голосов
/ 04 января 2011

Согласно этой теме perlmonk :

$string =~ s/^\s+|\s+$//g;
8 голосов
/ 04 января 2011
3 голосов
/ 03 декабря 2014

Для тех, кто использует Text :: CSV, я нашел этот поток, а затем заметил в модуле CSV, что вы можете удалить его через переключатель:

$csv = Text::CSV->new({allow_whitespace => 1});

Логика обратная в том, что если вы хотитечтобы раздеться, тогда вы установите 1. Идите рисунок.Надеюсь, это кому-нибудь поможет.

3 голосов
/ 22 января 2014

Один из вариантов: Текст :: Обрезать :

use Text::Trim;
print trim("  example  ");
3 голосов
/ 12 ноября 2013

Я также использую позитивный взгляд, чтобы обрезать повторяющиеся пробелы внутри текста:

s/^\s+|\s(?=\s)|\s+$//g
2 голосов
/ 04 января 2011

Применить: s/^\s*//; s/\s+$//; к нему. Или используйте s/^\s+|\s+$//g, если хотите быть модным.

0 голосов
/ 04 января 2011

Нет, но вы можете использовать оператор замены s/// и утверждение пробела \s, чтобы получить тот же результат.

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