1-й: похоже, что вы попали в общую ловушку: у вас была одна проблема, вы решили ее решить с помощью регулярных выражений, и теперь у вас есть две проблемы.
Вы должны увидеть, можете ли вы использовать свою стандартную библиотеку, чтобы попытаться разобрать предполагаемый float в float, чтобы избежать необходимости возиться с приблизительными регулярными выражениями.
Зависит от того, какие стили текстового представления чисел с плавающей запятой вы хотите разрешить.
Научная запись:
[-+]?\d(\.\d+)?([eE]-?\d+)?
Простой десятичный знак:
-?\d+(\.\d+)?
Разрешить пустую целую часть:
[-+]?((\d*\.\d+)|(\d+(\.\d+)?))