Any time you're extracting data, you're going to be making assumptions about what form the data is in, and then telling the computer to look for patterns based on those assumptions. Getting the right assumptions can be as important as getting the code right for the assumptions that you have chosen. In this case, one assumption you might make is that each number consists of one digit followed by a decimal place, followed by some more digits followed by "e", followed by either "+" or "-", and then followed by more digits. If you know how long each set of digits will be, you can split on those length. The length most likely to be consistent is the number of digits before the decimal place; if the numbers are in scientific notation, then there will only be one digit. However, there might also be a minus sign before that digit. So you can go through the string, and check whether you have: (next character is + or -, and current+3 is .) or (current+2 is .); every time that occurs, you get another number.
number_list = [None]
beginning_of_current_number = 0
for index in range(len(str)-3):
if (str[index+1] in ["+","-"] & str[index+3] == "."):
number_list.append(float(str[beginning_of_current_number:index+1]))
beginning_of_current_number = index+1
elsif (str[index+2] == "." & beginning_of_current_number != index-1):
number_list.append(float(str[beginning_of_current_number:index+1]))
beginning_of_current_number = index+1
#the above won't get the last number, so
number_list.append(float(str[beginning_of_current_number:-1]))