Python 解析串联数字的字符串

Python 解析串联数字的字符串,python,parsing,Python,Parsing,有没有一种方法可以提取浮点数,这些浮点数采用不同的未知格式,不带分隔符连接成如下字符串: “3.01-1.58e+006-1.58e+006” 我需要为上述字符串提取以下数字: 3.01 -1.58e+006 -1.58e+006 注:数字的长度/格式是可变的;我们不知道字符串中有多少个数字。这个正则表达式并不漂亮,但它似乎适用于您的示例: ((?:^|[\+\-])[\d\.]+(?:e[\+\-]\d+)?) 它的意思是:字符串或符号的开头,后跟数字和点,可能后跟e,后跟符号和数字 &g

有没有一种方法可以提取浮点数,这些浮点数采用不同的未知格式,不带分隔符连接成如下字符串:

“3.01-1.58e+006-1.58e+006”

我需要为上述字符串提取以下数字:

3.01 -1.58e+006 -1.58e+006


注:数字的长度/格式是可变的;我们不知道字符串中有多少个数字。

这个正则表达式并不漂亮,但它似乎适用于您的示例:

((?:^|[\+\-])[\d\.]+(?:e[\+\-]\d+)?)

它的意思是:字符串或符号的开头,后跟数字和点,可能后跟
e
,后跟符号和数字

>>> import re
>>> re.findall("((?:^|[\+\-])[\d\.]+(?:e[\+\-]\d+)?)","3.01-1.58e+006-1.58e+006")
['3.01', '-1.58e+006', '-1.58e+006']

每当你提取数据时,你都会对数据的形式做出假设,然后告诉计算机根据这些假设寻找模式。获得正确的假设与为您选择的假设获得正确的代码一样重要。在这种情况下,您可能会假设每个数字由一位数字加上一个小数位组成,后面跟着一些数字,后面跟着“e”,后面跟着“+”或“-”,然后跟着更多的数字。如果您知道每组数字的长度,您可以根据这些长度进行拆分。最有可能保持一致的长度是小数点前的位数;如果数字是科学记数法,那么只有一个数字。然而,在这个数字之前也可能有一个负号。因此,您可以遍历字符串,并检查是否有:(下一个字符是+或-,当前+3是。)或(当前+2是。);每次发生这种情况,你就会得到另一个号码

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]))

如果正数
3.011.58e+0061.58e+006
如何知道应该拆分到哪里?我想说的是,如果不知道一些约束条件,您将无法提取任何内容。你有什么限制吗?至少是隐式的?正数有加号吗?所有值的位数是否相同?