我有一个具有这种结构的文件:
{8.21689*10^-18}
{2.0033*10^-16}
{1.20201*10^-15}
{4.12718*10^-15}
{1.05284*10^-14}
{2.23678*10^-14}
{4.19995*10^-14}
{7.21721*10^-14}
{1.16019*10^-13}
我需要替换
*10^-6
(例如)带有一个简单的正则表达式
0.000001
我该怎么做? 如果你能给我一本书或一些在线课程,我也会非常感激,以了解如何使用正则表达式。
答案 0 :(得分:2)
我认为我使用Excel解决了您的问题。它避免了你必须编写代码。也许你可以使用VB进行自动化。
以下是理由:
{8.21689*10^-18}
=LEN(A1)-FIND("*10^";A1)-4
:确定电源号码的位置(例如18)。由于*10^
=RIGHT(A1;B1)
:这将为您提供A1中从B1开始的值的子字符串,即在此示例中它将返回18}
。=LEFT(C1;LEN(C1)-1)
。这将使你摆脱尾随花括号并返回18
。=CONCATENATE("0.";REPT("0";D1-1);"1")
。你这样做的原因是Excel有一个讨厌的习惯,即使用1E18作为符号,这样就无法解决你的问题。您获得的值是:0.000000000000000001 以下是我尝试使用Excel表格的示例数据:
{8.21689 * 10 ^ -18} 3 18} 18 0.000000000000000001 {2.0033 * 10 ^ -16} 3 16} 16 0.0000000000000001 {1.20201 * 10 ^ -15} 3 15} 15 0.000000000000001 {4.12718 * 10 ^ -15} 3 15} 15 0.000000000000001 {1.05284 * 10 ^ -14} 3 14} 14 0.00000000000001 {2.23678 * 10 ^ -14} 3 14} 14 0.00000000000001 {4.19995 * 10 ^ -14} 3 14} 14 0.00000000000001 {7.21721 * 10 ^ -14} 3 14} 14 0.00000000000001 {1.16019 * 10 ^ -13} 3 13} 13 0.0000000000001 {1.16019 * 10 ^ -7} 2 7} 7 0.0000001 {1.16019 * 10 ^ -117} 4 117} 117 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
然后,您只需将其另存为CSV文件即可。
答案 1 :(得分:1)
我找到了更简单的方法,为了我的目的(我将这些数字带到了一个数组)。那不是我要求的,但仍然适合我。
我刚刚用*10^
e
3.11154e-18
样式编号很容易被python解析,因为它是一个默认的浮动数据。
# -*- coding: utf-8 -*-
import operator
def prod(lst):
return reduce(operator.mul, lst, 1)
f = open("new.txt", "r")
buff = ""
array = []
for line in f:
buff += line
if "}" in line:
start = buff.index("{")
end = buff.index("}")
array.append([prod(float(factor.strip()) for factor in val.split("*")) for val in buff[start+1:end].split(",")])
buff = buff[end+1:]
f.close()