Perl删除前导和拖尾空白(删除左右空格、空白字符)

2023-12-08 0 415

其它一些编程语言中,有函数ltrim和rtrim分别用于从字符串开头和末尾删除空格和制表符。 也有的提供了函数trim来删除字符串两端的空白字符Perl里没这些函数因为简单的正则表达式替换就能实现这个目的(不过我确信CPAN有很多模块实现了这些函数)。事实上这太简单了以至于成了帕金森琐碎定理里的一个显著主题。

左侧整理

ltrim或者lstrip从字符串左侧删除空白字符:
复制代码 代码如下:
$str =~ s/^\\s+//;

从字符串开头^开始匹配一个或者多个空白字符(\\s+),并将之替换成空字符。

右侧整理

rtrim或者rstrip从字符串右侧删除空白字符:
复制代码 代码如下:
$str =~ s/\\s+$//;

匹配一个或者多个空白字符(\\s+)直到字符串末尾($),并将之替换成空字符。

整理两端

trim删除字符串两端的空白字符:
复制代码 代码如下:
$str =~ s/^\\s+|\\s+$//g

将上面两个正则表达式用或记号|连起来,并在最后增加/g用以全局地执行替换操作(反复多次)。

封装在函数里

如果你不想在代码中看到这些结构,你可以在代码里添加这些函数:
复制代码 代码如下:
sub ltrim { my $s = shift; $s =~ s/^\\s+//; return $s };
sub rtrim { my $s = shift; $s =~ s/\\s+$//; return $s };
sub trim { my $s = shift; $s =~ s/^\\s+|\\s+$//g; return $s };

使用时像这样:
复制代码 代码如下:
my $z = \” abc \”;
printf \”<%s>\\n\”, trim($z); # <abc>
printf \”<%s>\\n\”, ltrim($z); # <abc >
printf \”<%s>\\n\”, rtrim($z); # < abc>
String::Util

String::Util

要是实在不想拷贝那些东西,你可以安装一个模块。

例如String::Util提供了函数trim,你可以如下使用:
复制代码 代码如下:
use String::Util qw(trim);

my $z = \” abc \”;
printf \”<%s>\\n\”, trim( $z ); # <abc>
printf \”<%s>\\n\”, trim( $z, right => 0 ); # <abc >
printf \”<%s>\\n\”, trim( $z, left => 0 ); # < abc>

默认它整理两侧,你不需要提供参数。 我觉得,自己实现ltrim和rtrim会清晰些。

Text::Trim

另一个模块Text::Trim提供了3个函数,但是它极度采纳了Perl风格的写法,可能到了有些危险的地步。

如果你调用它并将返回值用在print语句或者赋给一个变量,它会返回整理过的字符串,并保持原始字符串不变。
复制代码 代码如下:
use Text::Trim qw(trim);

my $z = \” abc \”;
printf \”<%s>\\n\”, trim($z); # <abc>
printf \”<%s>\\n\”, $z; # < abc >

另一方面,如果你在空白上下文调用它,亦即不使用返回值,trim函数就会修改参数,产生类似chomp的行为。
复制代码 代码如下:
use Text::Trim qw(trim);

my $z = \” abc \”;
trim $z;
printf \”<%s>\\n\”, $z; # <abc>

您可能感兴趣的文章:

  • 用于过滤空白字符的几种常见的js正则表达式pattern
  • 用MySQL函数清除字符串首尾空白字符的方法
  • ASP.NET通过自定义函数实现对字符串的大小写切换功能
  • PHP实现删除字符串中任何字符的函数
  • 10个.NET中删除空白字符串的方法

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Perl Perl删除前导和拖尾空白(删除左右空格、空白字符) https://www.u-9.cn/jiaoben/perl/144866.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务