Expr. regulares (parte 2)

Catalin Lungu lcatalin en siadv.com
Jue Feb 23 13:58:02 CET 2006


Muchísimas gracias Chema,
Muy bien explicado incluso me enterado mas que con la documentación.
De todas formas la expresión mas simplificada 
"-?\d*((?<=\d)|[\.,](?=\d))\d*" acepta literales después del punto y también 
entre el signo y el separador de decimales. Pues, cuando parece que va bien 
comprobando todas las posibilidades empieza fallar por todos los lados.

Ej. -12345.abcd
     -abcd.12345

He intentado hacer una función que simplifique mas las cosas pero creo que 
los complica mas y ademas no va para todos los casos.


def EsDouble(strNumber):
   NotNumber = re.compile("[^0-9]")
   DosPuntos = re.compile("[0-9]*[\.][0-9]*[\.][0-9]*")
   DosComas = re.compile("[0-9]*[\.][0-9]*[\.][0-9]*")
   DosMenos = re.compile("[0-9]*[-][0-9]*[-][0-9]*")
   RealValidoPunto = re.compile("([-]|[\.]|[-\.]|[0-9])[0-9]*[\.]*[0-9]+")
   RealValidoComa = re.compile("([-]|[,]|[-,]|[0-9])[0-9]*[,]*[0-9]+")
   EnteroValido = "([-]|[0-9])[0-9]*"
   numerop = re.compile("(" + RealValidoPunto + ")|("  +  RealValidoComa  + 
")|( " + EnteroValido + ")")
   return (not NotNumber.match(strNumber)) and
             (not DosPuntos.match(strNumber)) and
             (not DosComas.match(strNumber)) and
             (not DosMenos.match(strNumber)) and
             numerop.match(strNumber)

Un saludo,
C. 




Más información sobre la lista de distribución Python-es