Perl:修剪字符串前后空格的功能


82

是否有内置功能来修剪前导和尾随空白,例如trim(" hello world ") eq "hello world"


3
仅供参考:Perl中的字符串相等性由操作员测试eq
A. Rex

5
对您获得的所有解决方案都需要澄清一下:s/^\s+|\s+$//g;vss/^\s*//; s/\s*$//;后者是这样做的一种(甚至略微)惯用的方法,因为在这种情况下,重新启动regex引擎实际上比更改更快。您可以在Jeffrey Friedl的Mastering Regular Expressions上了解有关此内容的更多信息。(除非在某些较新版本的Perl中解决了该问题,在这种情况下请纠正我!)
Hugmeir 2011年

4
来自Java和.NET背景,这几乎不是语言内置的功能!谢谢大家!
兰登·库恩

3
@ landon9720,它有点是:Scalar :: Util经过修饰,从5.7.3开始就是核心-那是2002年!
格米尔2011年

3
休米尔,这是错误的,请参见以太的答案
daxim 2011年

Answers:


89

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

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

Perl 6将包含修剪功能:

$string .= trim;

资料来源:维基百科


5
我大约每月检查一次。太糟糕了,我不能每次都投票。
凯尔2014年

82

可在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";

印刷品:

字符串现在是'hello'

但是,做自己很容易:

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

@ mklement0也不会。但这无关紧要,因为每个人都应该使用CPAN中的模块。
以太2015年

2
为什么每个人都应该使用CPAN的模块?当从Linux发行版(debian,redhat,ubuntu)中使用perl并与手动安装的CPAN模块结合使用时,这会使一致性变得困难。如果可以使用在Linux发行版中作为软件包提供的模块在perl中完成某些操作,那就更好了
Marki555'1

在Linux发行版作为软件包提供的@ Marki555模块来自CPAN,它们刚刚被重新打包。通常,如果尚未打包某个模块,则通常可以要求将其打包(debian专家特别敏感并且乐于助人)。
以太

1
我知道它们也来自CPAN ...是的,通常我可以为debian请求一个新的pkg,但是对于我安装的debian稳定版本来说,这不会帮我...这就是为什么我更喜欢打包模块,但是如果需要的话直接使用CPAN真的需要。
Marki555 '16

4
@Ether在所有应有的尊重下,我非常感谢知道这是一个非核心模块。这篇文章讨论的是使用模块代替相当简单的正则表达式单行代码。如果模块是核心模块,那么我将更加开放。在这种情况下很重要。
UncleCarl



8

在此处的perfaq中完成howto:http ://learn.perl.org/faq/perlfaq4.html#How-do-I-strip-blank-space-from-the-beginning-end-of-a-string-


3

对于那些使用Text :: CSV的用户,我找到了该线程,然后在CSV模块中注意到可以通过开关将其删除:

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

逻辑倒退,因为如果要剥离,则将其设置为1。希望这对任何人都有帮助。





-4

否,但是您可以使用s///替代运算符和\s空白断言来获得相同的结果。


这将删除单词之间的空格,而不仅仅是字符串的两端。
DarenW

@DarenW:取决于您的使用方式。
菲利普·波特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.