2010-03-04 17 views
5

Ho bisogno di aiuto con un'espressione regolare che corrisponde a un numero. Ho bisogno di un massimo di 3 cifre dopo il punto (.):aiuto con Regex - serve fino a 3 numeri dopo il punto (.)

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

come fare? Grazie in anticipo.

+3

'12.': ok o errore? '.123' ok o errore? '.': ok o errore? –

risposta

3

Si può provare:

^\d+|(\d+\.\d{1,3})$ 
  • \d - singola cifra
  • \d+ - una o più cifre, che è un numero .
  • \. - punto è un metachar..so per abbinare un punto letterale , è necessario sfuggire a esso.
  • {1,3} - tra 1 e 3 (entrambi inclusi) ripetizioni della precedente cosa .
  • ^ e $ - Ancore in modo che corrispondano a intera cosa non solo parte di qualcosa.
13
\d+(?:\.\d{1,3})? 

Spiegazione:

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

+1 per una bella spiegazione – IAbstract

1

Sei certo bisogno regex per risolvere il problema riscontrato? ne dite:

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

Questo codice è né completa o corretta al 100% (introito è solo come idea e gestire i casi specifici da soli), ma secondo me, esprime l'intento molto più chiaramente rispetto all'utilizzo di una regex per risolvere un problema che non ha bisogno di regex affatto.

+3

'/ \ d + (?: \. \ D {1,3})? /' Mi sembra piuttosto chiaro ... –

+0

... legge chiaramente a chiunque conosca espressioni regolari. Non esprime affatto l'intenzione per chi non ha familiarità con le espressioni regolari ed è un eccesso di forza delle espressioni regolari per un problema che ha una soluzione molto più facile e leggibile. – Marek

+0

Come è eccessivo? Per coloro che conoscono la regex, questa applicazione cade perfettamente sul punto debole della lingua. E non puoi essere serio sul fatto che la tua soluzione sia più facile e più leggibile. Non so nemmeno cosa faccia TryParse senza dover cercare l'API. – polygenelubricants

Problemi correlati