¿Te das cuenta que lo que pides es muy retorcido? En una misma regex hacer que los tres términos (decimal, separador y entero) sean opcionales, es un error, ya que para que un valor sea válido depende de que haya otros valores o no , y para eso es más legible separar las condiciones.
Si lo único que quieres es saber si se puede convertir a double, ¿por qué no usas un Double.parseDouble() dentro de un try/catch?
Si sigues empeñado en hacer una sola regex
http://www.regular-expressions.info/conditional.html