1

私は、次のような工学表記法ですべて numbest の等式文字列を持っています。

"(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

そして、この 2 つのリストに取り組みます。しかし、それは複雑すぎるようです。この 2 つのリストを結合して文字列に戻す簡単な方法がわかりません。

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 に答える