1

我有方程式字符串,其中所有工程符号中的数字都非常好,例如:

"(10u*myvar1)+(2.5f*myvar2)/myvar3"

我需要将此方程式字符串中的所有数字转换为科学记数法,以便结果如下:

"(10e-6*myvar1)+(2.5e-15*myvar2)/myvar3"

有谁知道如何使这个简单?

我认为将其与 re.findall 拆分为数字和其他东西的艰难方法,而不是修复数字并重新加入字符串。像:

vals=re.findall('[\d.\w]+',param_value) #all numbers
operators=re.findall('[^\d.\w]+',param_value) #all not numbers

而不是在这两个列表上工作。但这似乎太复杂了。我看不到将这两个列表加入字符串的简单方法。

4

1 回答 1

2

你可以做一个简单的正则表达式替换:

>>> units = 'munpf'
>>> def f(match):
    num = match.group(0)
    exp = -3 * (units.index(num[-1]) + 1)
    return num[:-1] + '10e' + str(exp)

>>> expr = "(10u*myvar1)+(2.5f*myvar2)/myvar3"

>>> re.sub(r'\b\d+(\.\d*)?' + '[%s]' % units + r'\b', f, expr)
'(10e-6*myvar1)+(2.5e-15*myvar2)/myvar3'

如果你愿意,它很容易扩展。

于 2012-12-05T12:02:48.247 回答