El mejor método, el más "limpio", es el que entiendas. De nada te sirve usar una expresión regular que te valide la cadena pero que luego, si querés modificar, no sepas cómo.
Tu prioridad debería ser que funcione; y solamente si luego funciona lento, optimizarlo.
La respuesta a tu pregunta es algo como esto:
Código:
([+-]?\d+(\.\d+)?([Ee]\d+)? ?)+
Que no sé si funciona correctamente, pero sigue la idea aunque no es muy legible. Nota que la expresión que te dio razpeitia no es correcta en todos los casos porque daría como correcta a "1." y a "1e05" (que es un flotante válido aunque no tenga decimales), mientras que no daría como correcta a "1.5e19"
El problema son las partes opcionales. Al validar enteros mezclados con flotantes, tienes dos partes opcionales: la parte decimal y la parte exponencial. Esto lleva a que haya 4 posibilidades:
entero => 1
flotante sin exponente => 1.5
flotante sin decimales => 1E05
flotante con decimales y con exponente => 1.5E05
Además, si querés validar toda la cadena de una vez, tendrás que tener en cuenta que el patrón se repite, separado por un espacio (o no, quizás la parte final no tenga espacio)
Saludos.