我的数据包含带有浮点数字的字符串,例如

"['0.0'" and '82.00.0' and '82.0\n'


我只想提取浮点数,直到像这样的小数点后两位/一

"['0.0'" and '82.00.0' and '82.0\n' to 0.0, 82.0, 82.0


数据结构是一个大引用的CSV,例如:

"0.0, 82.00.0,...., 82.0\n"

我正在遍历这些以将它们存储到临时

tempprices.split(',') temp =[] for n in range(l, len(tempprices)-1): temp.append(map(ast.literal_eval,re.findall(r'(?<!\S)[+-]?\d+\.\d{1,2}(?!\.*\d)',tempprices[n])))

其中l是某个索引值。

我想像这样将这些附加到temp

如何实现呢?

最佳答案

有几个问题:


您未将拆分块分配给变量(请参见tempprices.split(',')
实际上,您必须提取1个值,所以re.sub可以工作,但是re.search更安全


您可以使用以下修复程序:

import re

tempprices = "0.0, 82.00.0,...., 82.0\n"
cells = tempprices.split(',')
temp =[]
for t in cells:
    mObj = re.search(r'-?\d+\.\d{1,2}', t)
    if mObj:
        temp.append(float(mObj.group()))
print(temp)


请参见IDEONE demo

如果每个单元格中可以有多个浮点值,则必须将ast.literal_evalre.findall一起使用:

for t in cells:
    temp.extend(map(ast.literal_eval, re.findall(r'-?\d+\.\d{1,2}', t)))
         ^^^^^^ ^^^^^^^^^^^^^^^^^^^^


another IDEONE demo

10-07 12:35