正则表达式使浮点数

时间:2013-10-23 13:40:56

标签: regex numbers sublimetext

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

{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

我该怎么做? 如果你能给我一本书或一些在线课程,我也会非常感激,以了解如何使用正则表达式。

2 个答案:

答案 0 :(得分:2)

我认为我使用Excel解决了您的问题。它避免了你必须编写代码。也许你可以使用VB进行自动化。

以下是理由:

  • 在第一列中,您可以输入您的值:{8.21689*10^-18}
  • 在第二列中=LEN(A1)-FIND("*10^";A1)-4:确定电源号码的位置(例如18)。由于*10^
  • ,你做的是减4
  • 在第三列中,使用=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.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()