Python 正则表达式提取浮动值

Python regex extracting floatin values

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

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

我只想提取浮点数直到 two/one 小数点,就像这样-

"['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 [0.0, 82.0, 82.0]

如何实现?

试试这个:

import re

s = '82.00\n    1.3000   9.1'
result = re.findall(r'\d+\.\d{1,2}', s)
print result

输出: ['82.00', '1.30', '9.1']

有几个问题:

  • 您没有将拆分块分配给变量(参见 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