2010-03-04 13 views
5

Necesito ayuda con una expresión regular que coincida con un número. Necesito hasta 3 dígitos después del punto (.):ayuda con Regex - necesita hasta 3 números después del punto (.)

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

cómo hacerlo? Gracias por adelantado.

+3

'12.': ok o error? '.123' ¿ok o error? '.': ¿ok o error? –

Respuesta

3

que puede probar:

^\d+|(\d+\.\d{1,3})$ 
  • \d - solo dígito
  • \d+ - uno o más dígitos, que es un número .
  • \. - dot es un metachar..so para que coincida con un punto literal , necesitará escapar .
  • {1,3} - entre 1 y 3 (ambos inclusive) repeticiones del anterior.
  • ^ y $ - Anclas para que coincida con todo no solo parte de algo.
13
\d+(?:\.\d{1,3})? 

Explicación:

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

+1 para una buena explicación – IAbstract

1

¿Seguro que necesita de expresiones regulares para resolver el problema que tiene? ¿Qué tal:

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

Este código es ni completa o correcta al 100% (toma es sólo como una idea y manejar los casos específicos mismo), pero en mi humilde opinión, que expresa la intención mucho más claramente que el uso de una expresión regular para resolver un problema que no necesita expresiones regex.

+3

'/ \ d + (?: \. \ D {1,3})? /' Me parece bastante claro ... –

+0

... se le lee claramente a cualquiera que sepa regex. No expresa ninguna intención para nadie que no esté familiarizado con las expresiones regulares y es una exageración de la fuerza de las expresiones regulares para un problema que tiene una solución mucho más fácil y legible. – Marek

+0

¿Cómo es esto una exageración? Para aquellos que saben regex, esta aplicación cae perfectamente en el punto óptimo del idioma. Y no es posible que se tome en serio que su solución sea más fácil y más legible. Ni siquiera sé lo que 'TryParse' hace sin buscar la API. – polygenelubricants

Cuestiones relacionadas