String 删除perl字符串中所有前导零的最优雅、最快速的方法
我编写了rmlz函数来修剪字符串中的所有前导零String 删除perl字符串中所有前导零的最优雅、最快速的方法,string,perl,substring,String,Perl,Substring,我编写了rmlz函数来修剪字符串中的所有前导零 # remove all leading zeroes from string use strict; use warnings; use feature 'say'; sub rmlz { my ( $str ) = @_; if ( $str =~ /^(.[0])/ ) { return substr( $str, length($1)); } return $str; } say rmlz('0050625');
# remove all leading zeroes from string
use strict;
use warnings;
use feature 'say';
sub rmlz {
my ( $str ) = @_;
if ( $str =~ /^(.[0])/ ) {
return substr( $str, length($1));
}
return $str;
}
say rmlz('0050625'); # must return 50625
有没有最优雅、最清晰的方法来重写这段代码?或者regexp+length+substr是最佳选项?使用替换运算符
$str =~ s/^0+//
将后跟1或多个0的字符串开头替换为nothing,而不是
if ( $str =~ /^(.[0])/ ) {
return substr( $str, length($1));
}
使用替换运算符
$str =~ s/^0+//
将后跟1或多个0的字符串开头替换为nothing,而不是
if ( $str =~ /^(.[0])/ ) {
return substr( $str, length($1));
}
简单的替换将删除前导零:
$str =~ s/^0+(?=[0-9])//;
这将删除尽可能多的零,同时仍保留至少一个数字。
需要后一个约束来防止0变为。简单的替换将删除前导零:
$str =~ s/^0+(?=[0-9])//;
这将删除尽可能多的零,同时仍保留至少一个数字。
需要后一个约束来防止0变为整数。因为这似乎是一个数字,如果它确实是一个整数,则可以将其重新格式化为整数
my $num = sprintf "%d", $num_in_str;
或者让Perl处理它,让它把字符串当作一个数字
my $num = 0 + $num_in_str; # or just: $num_in_str += 0;
这对于$num_in_str中的任何类型的数字都是正确的,而且它比sprintf或启动正则表达式引擎的效率要高得多。虽然这可能看起来很棘手,但在潜艇里也没问题
sub rmlz { return 0+$_[0] }
实际上,在Perl中,您只需支付函数调用开销
如果$num_in_str不是一个有效的数字,那么这两个打印警告在我看来都是好的,除非你需要处理像0023a这样的东西,在这种情况下你需要一个正则表达式。因为这似乎是一个数字,如果它确实是一个整数,那么可以将其重新格式化
my $num = sprintf "%d", $num_in_str;
或者让Perl处理它,让它把字符串当作一个数字
my $num = 0 + $num_in_str; # or just: $num_in_str += 0;
这对于$num_in_str中的任何类型的数字都是正确的,而且它比sprintf或启动正则表达式引擎的效率要高得多。虽然这可能看起来很棘手,但在潜艇里也没问题
sub rmlz { return 0+$_[0] }
实际上,在Perl中,您只需支付函数调用开销
如果$num_in_str不是一个有效的数字,那么这两个打印警告在我看来是好的,除非你需要处理像0023a这样的东西,在这种情况下你需要一个正则表达式。你关心实际金额吗?@DaveSherohman,是的,我需要删除。谢谢你的提问,我更新了标题。是的,没错!修正了你关心实际金额吗?@DaveSherohman,是的,我需要删除。谢谢你的提问,我更新了标题。是的,没错!固定的