2010-07-16 11 views
4

Utilisation de regex. en essayant d'obtenir que les derniers chiffres x du nombre et 0 padding si nécessaireen utilisant regex pour couper les derniers chiffres

Tenir compte de l'entrée suivante

1234 
123 
12 
1 

EDIT: Ceux-ci apparaissent individuellement les valeurs de chaîne

je suis en train de faire une expression regex (ou plusieurs expressions regex, idéalement un seul) rendement

34 
23 
12 
01 

Je suis un peu nouveau pour regex et backre fermentant et encore tâtonnant un peu. des idées sur où regarder ou quoi faire?

grâce

EDIT: Pour plus de précisions A utiliser dans System.Text.Regex.Replace de .net() fonction une de ces valeurs peut venir comme paramètre d'entrée.

EDIT: Merci pour les idées tout le monde. Il semble que cela ne peut pas être fait dans regex. Triste comme c'est.

+2

Dans quelle langue? –

+0

cela ira contre le processeur regex de .net. Je suis vraiment à la recherche d'une expression régulière Regex.Replace pour effectuer cela. – Beta033

+2

L'utilisation d'expressions régulières est-elle une exigence? Ce serait plus facile si ce n'était pas le cas. –

Répondre

1

Si vous devez utiliser des expressions régulières, cela peut être fait si vous utilisez un MatchEvaluator, mais il serait préférable de ne pas utiliser d'expressions régulières pour cette tâche.

Comme vous avez indiqué qu'une solution qui n'utilise des expressions régulières peut être acceptable, voici une façon de le faire en C# qui n'utilise des expressions régulières:

void Run() 
{ 
    string s ="1234"; 
    s = lastXDigits(s, 3); 
    Console.WriteLine(s); 
} 

string lastXDigits(string s, int x) 
{ 
    if (s.Length < x) 
    { 
     return s.PadLeft(x, '0'); 
    } 
    else 
    { 
     return s.Substring(s.Length - x); 
    } 
} 

Résultat pour chacune de vos entrées :

 
234 
123 
012 
001 
+0

Je pense que vous avez besoin de \ d {0, x} ou vous manquerez quelque chose avec moins de x chiffres. – cape1232

+0

@ cape1232: Je n'ai pas vu l'exigence que le remplissage devrait être variable. Je vais mettre à jour. –

+0

Je pense que je vais utiliser cette approche. semble que je ne peux pas vraiment faire ce que je veux avec regex seul. – Beta033

0

ce que vous pouvez faire est d'utiliser un .substring(int start, int length) puis formater la chaîne à 2 caractères, mais à moins que vous spécifiez la langue, nos mains sont un peu à égalité.

0

Ce ne sera pas le zéro pad, mais semble fonctionner (testé en JavaScript):

/[0-9]{1,2}$/ 
1

Sur la base de vos questions, je suppose que vous utilisez VB.Net.

Vous n'avez pas besoin d'une regex; vous pouvez simplement utiliser la manipulation de chaînes:

Dim str As String 

If str.Length > 2 Then str = str.Substring(str.Length - 2) 
str = str.PadLeft(2, '0'c) 
+0

+1 pour l'approche non-regex (il s'avère que ce n'était pas une exigence après tout). –

0

Quelle langue utilisez-vous? .. Cela pourrait être plus facile sans regex.

Par exemple Voici comment vous pouvez le faire en PHP:

$arr = array(1234,123,12,1); 

foreach($arr as $num) 
{ 
    echo '<br />'.str_pad(substr($num,-2), 2, "0", STR_PAD_LEFT); 
} 
Questions connexes