如果值仅包含零,如何删除所有前导零但保留最后的零?
例如:
my $number = "0000";
Run Code Online (Sandbox Code Playgroud)
我想拥有:
my $number = "0";
Run Code Online (Sandbox Code Playgroud)
我试过了:
$number =~ s/^0*//;
Run Code Online (Sandbox Code Playgroud)
但这当然会删除这种情况下的所有零.
Mat*_*Mat 21
这应该工作:
$number =~ s/^0*(\d+)$/$1/;
0 -> 0
0000 -> 0
0001 -> 1
Run Code Online (Sandbox Code Playgroud)
编辑:事实证明这有点太复杂了.这应该也有效:
$number =~ s/0*(\d+)/$1/;
Run Code Online (Sandbox Code Playgroud)
但我不确定哪个更好,取决于用例.
看看Oesor的答案:它也非常好,没有正则表达式.
Oes*_*sor 12
这不需要作为正则表达式完成.
my @nums = qw/ 00000 000 000001 002 00000005 00000064 /;
@nums = map { $_ + 0 } @nums;
Run Code Online (Sandbox Code Playgroud)
$number =~ s/^0+(?=\d)//;
Run Code Online (Sandbox Code Playgroud)
积极向前确保至少剩下一个数字,如果没有前导零,则使用+而不是*意味着跳过替换.
如果您尝试在单个字符串中规范化数字组,只需使用\b而不是^,并进行全局替换:
my $data = "0225 0000 030";
$data =~ s/\b0+(?=\d)//g;
Run Code Online (Sandbox Code Playgroud)
那么,如果您想全部替换为 1,只需更改为s/^0+/0/?
但是,这会将所有前导 0 替换为 1 个 0,因此如果数字前有前导零,则需要 Mats 构造。