Perl:修剪字符串前导和尾随空格的函数

时间:2011-01-04 20:10:52

标签: perl

是否有内置函数来修剪前导和尾随空格,以便trim(" hello world ") eq "hello world"

10 个答案:

答案 0 :(得分:82)

以下是使用正则表达式的一种方法:

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

Perl 6将包含一个修剪功能:

$string .= trim;

来源:Wikipedia

答案 1 :(得分:80)

使用trim方法在String::Util中可以使用此功能:

编者注:String::Util不是核心模块,但您可以使用[sudo] cpan String::UtilCPAN安装。

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

打印:

  

字符串现在是'你好'

然而,自己做起来很容易:

$str =~ s/^\s+//;
$str =~ s/\s+$//;

答案 2 :(得分:26)

没有内置的trim功能,但您可以使用简单的替换轻松实现自己的功能:

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

或在Perl 5.14及更高版本中使用non-destructive substitution

sub trim {
   return $_[0] =~ s/^\s+|\s+$//rg;
}

答案 3 :(得分:9)

根据this perlmonk's thread

$string =~ s/^\s+|\s+$//g;

答案 4 :(得分:8)

答案 5 :(得分:3)

我还使用正向前瞻来修剪文本中的重复空格:

s/^\s+|\s(?=\s)|\s+$//g

答案 6 :(得分:3)

一个选项是Text::Trim

use Text::Trim;
print trim("  example  ");

答案 7 :(得分:3)

对于那些使用Text :: CSV的人,我找到了这个帖子,然后在CSV模块中注意到你可以通过开关将其剥离出来:

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

逻辑是向后的,如果你想剥离,那么你设置为1.去图。希望这对任何人都有帮助。

答案 8 :(得分:2)

申请:s/^\s*//; s/\s+$//;。如果你想要花哨,可以使用s/^\s+|\s+$//g

答案 9 :(得分:-4)

不,但您可以使用s///替换运算符和\s空格断言来获得相同的结果。