Supprimer les zéros en tête mais pas tous les zéros
Comment puis-je supprimer tous les zéros, mais laisser une dernière zéro si la valeur ne contient que des zéros?
par exemple:
my $number = "0000";
Je voudrais avoir:
my $number = "0";
J'ai essayé:
$number =~ s/^0*//;
mais bien sûr, cela supprime tous les zéros dans ce cas.
source d'informationauteur perlfoo
Vous devez vous connecter pour publier un commentaire.
Cela devrait fonctionner:
Edit: s'avère que c'est juste un peu trop compliqué. Cela devrait aussi fonctionner:
mais je ne suis pas sûr de ce qui est mieux dépend du cas d'utilisation.
Ne découvrez la réponse de Oesor: c'est très bien aussi, pas de regex impliqués.
Cela n'a pas besoin d'être fait, comme une regex.
L'anticipation positif assure il y a au moins un chiffre à gauche, et à l'aide de
+
au lieu de*
signifie la substitution est ignoré si il n'y a pas les zéros à gauche.Si vous êtes en essayant de normaliser les groupes de nombres dans une seule chaîne de caractères, il suffit d'utiliser
\b
au lieu de^
et de faire une substitution globale:Si votre
$number
est un entier, une autre façon est d'utiliser des printf:Edit: Comme ysth points, il fonctionne pour tous les entiers, et pas seulement les entiers positifs que j'ai indiqués à l'origine.
Certaines réponses sont en supposant implicitement il y a uniquement des chiffres ou
$number
est en fait un certain nombre. Si ce n'est pas le cas:Ou encore:
Eh bien, si vous souhaitez remplacer l'ensemble par un changement de
s/^0+/0/
?Cependant, ce sera de remplacer tous les leaders de 0 par 0, donc si vous avez des zéros avant les numéros, vous aurez besoin de Tapis de construire.
my $var = '0000035600000';
$var = $var + 0;
Que c'est!