0

我有一个具有这种结构的文件:

{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

我怎样才能做到这一点?如果你能给我一本书或一些在线课程来学习如何使用正则表达式,我也会非常感激。

4

2 回答 2

2

我想我用 Excel 解决了你的问题。它避免了您必须编写代码。也许你可以用一点 VB 来实现自动化。

理由如下:

  • 在第一列中,您可以输入您的值:{8.21689*10^-18}
  • 在第二列do =LEN(A1)-FIND("*10^";A1)-4:确定幂数的位置(例如18)。你做负4是因为*10^
  • 在第三列中,使用=RIGHT(A1;B1): 这将为您提供 A1 中从 B1 开始的值的子字符串,即它将18}在此示例中返回。
  • 在第 4 列做=LEFT(C1;LEN(C1)-1). 这将使您摆脱尾随花括号并返回18
  • 最后在第 5 列做=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.000000000000000000000000000000001 15 0.0000000000001 {1.05284*10^-14} 3 14} 14 0.000000000001 {2.23678*10^-14} 3 14} 14 0.0000000000000001 {4.19995 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.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

您所要做的就是将其保存为 CSV 文件。

于 2013-10-23T14:10:15.590 回答
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()
于 2013-10-23T15:03:38.263 回答