Per poter sviluppare correttamente la RegExp, occorre sapere l'uso che verra` eventualmente fatto dei singoli pezzi.

Comunque suppongo che non vengano usati i pezzi e che la RegExp serva solo per accettare o rifiutare una stringa, e che non ci siano spazi prima e dopo.

Comunque per una validazione completa, come mi par di capire vuoi, servono due passaggi, oppure una RegExp piu` complessa:

Prova questa:
^[-\+]?(\d(\.\d+)?)|(\.\d+)$

Nota l'operatore OR che sceglie tra i due casi se esiste o no una parte intera