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)
如果每个单元格内可以有多个浮点值,则必须使用 ast.literal_eval
和 re.findall
:
for t in cells:
temp.extend(map(ast.literal_eval, re.findall(r'-?\d+\.\d{1,2}', t)))
^^^^^^ ^^^^^^^^^^^^^^^^^^^^
我的数据包含带浮点数的字符串,例如
"['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)
如果每个单元格内可以有多个浮点值,则必须使用 ast.literal_eval
和 re.findall
:
for t in cells:
temp.extend(map(ast.literal_eval, re.findall(r'-?\d+\.\d{1,2}', t)))
^^^^^^ ^^^^^^^^^^^^^^^^^^^^