2010-03-04 8 views
5

J'ai besoin d'aide avec une regex correspondant à un nombre. J'ai besoin de jusqu'à 3 chiffres après le point (.):aide avec Regex - besoin de jusqu'à 3 nombre après le point (.)

 
12345 ok 
12  ok 
12.1  ok 
12.12 ok 
12.123 ok 
12.1234 Error 
1.123456 Error 

comment le faire? Merci d'avance.

+3

'12.': ok ou erreur? '.123' ok ou erreur? '.': ok ou erreur? –

Répondre

3

Vous pouvez essayer:

^\d+|(\d+\.\d{1,3})$ 
  • \d - Un seul chiffre
  • \d+ - un ou plusieurs chiffres, qui est un nombre . - point est un metachar..so pour correspondre à un point littéral , vous aurez besoin d'échapper à .
  • {1,3} - entre 1 et 3 (tous les deux inclus) répétitions du précédent.
  • ^ et $ - Ancrages de telle sorte que nous correspondons chose entière non seulement une partie de quelque chose.
13
\d+(?:\.\d{1,3})? 

Explication:

 
\d+  # multiple digits 
(?:  # start non-capturing group 
    \.  # a dot 
    \d{1,3} # 1-3 digits 
)?   # end non-capturing group, made optional 
+0

+1 pour une bonne explication – IAbstract

1

Êtes-vous sûr que vous avez besoin regex pour résoudre le problème que vous rencontrez? Que diriez-vous:

bool ContainsAtMostThreeNumbersAfterDot(string str) 
{ 
    int dotIndex = str.IndexOf("."); 
    float f; 
    return float.TryParse(str, out f) && str.Length - dotIndex < 3; 
} 

Ce code est ni complète ou 100% correct (prendre est aussi une idée et gérer les cas spécifiques vous-même), mais à mon humble avis, il exprime l'intention beaucoup plus clairement que d'utiliser un regex pour résoudre un problème qui n'a pas du tout besoin de regex.

+3

'/ \ d + (?: \. \ D {1,3})? /' Se lit assez clairement pour moi ... –

+0

... lit clairement à toute personne connaissant regex. N'exprime pas du tout d'intention pour quelqu'un qui ne connaît pas les expressions régulières et est une exagération de la force des expressions régulières pour un problème qui a une solution beaucoup plus facile et lisible. – Marek

+0

Comment est-ce une surpêche? Pour ceux qui connaissent regex, cette application tombe parfaitement sur le sweet spot de la langue. Et vous ne pouvez pas vraiment être sérieux au sujet de votre solution étant plus facile et plus lisible. Je ne sais même pas ce que TryParse fait sans regarder l'API. – polygenelubricants