微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

除去前导零,但不能除去所有零

如何解决除去前导零,但不能除去所有零

| 如果值仅包含零,如何删除所有前导零,而保留最后一个零? 例如:
my $number = \"0000\";
我想拥有:
my $number = \"0\";
我试过了:
$number =~ s/^0*//; 
但是在这种情况下,这当然会删除所有零。     

解决方法

这应该工作:
$number =~ s/^0*(\\d+)$/$1/;

0    -> 0
0000 -> 0
0001 -> 1
编辑:事实证明,这有点太复杂了。这也应该起作用:
$number =~ s/0*(\\d+)/$1/;
但我不确定哪个更好,取决于用例。 请检查一下Oesor的答案:它也很漂亮,不涉及任何正则表达式。     ,不需要作为正则表达式来完成。
my @nums = qw/ 00000 000 000001 002 00000005 00000064 /;
@nums = map { $_ + 0 } @nums;
    ,
$number =~ s/^0+(?=\\d)//;
正的前瞻确保剩下至少一位数字,并且使用
+
而不是
*
表示如果没有前导零,则跳过替换。 如果您要规范单个字符串中的数字组,只需使用
\\b
而不是
^
,然后进行全局替换:
my $data = \"0225 0000 030\";
$data =~ s/\\b0+(?=\\d)//g;
    ,如果您的
$number
是整数,则另一种方法是使用printf:
for my $number (qw(005 05 5 000 0 500)) {
    printf \"%d\\n\",$number;
}

__END__

5
5
5
0
0
500
编辑:正如ysth所指出的,它适用于所有整数,而不仅仅是我最初所说的正整数。     ,某些答案是隐含的,假设仅存在数字,或者
$number
实际上是数字。如果不是这种情况:
s/^0+(?=.)//s
甚至:
substr($number,-1) =~ s/^0+//s
    ,只需在字符串上添加0,即可将其隐式转换为数字:
my $var = \'0000035600000\';
$var += 0;
    ,好吧,如果您想将所有内容替换为一个,只需更改为
s/^0+/0/
? 但是,这会将所有前导0 \替换为一个0,因此,如果在数字之前有前导零,则需要Mats构造。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。