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