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