Я бы использовал:
number = str[ /\d*(?:\.\d+)?/ ]
Или, если для значений меньше 1,0 требуется начальный 0,
number = str[ /\d+(?:\.\d+)?/ ]
Если у вас могут быть другие числа в строке, и вам нужен только (первый) номер, перед которым стоит знак доллара:
number = str[ /\$\s*(\d+(?:\.\d+)?)/, 1 ]
Если гарантируется, что после этого будет (должен) быть десятичный знак и цифра (цифры):
number = str[ /\$\s*(\d+\.\d+)/, 1 ]
Надеемся, что вы можете смешивать и сочетать некоторые из этих решений, чтобы получить то, что вам нужно.