0

文字列から数学を取得しようとしていますが、小数がなくてもすべて完全に機能しましたが、それらを追加し始めたときに機能が停止したため、そこにドットが残っていないようです。私の正規表現は正しいと思いますが、誰かが私を修正できますか?

result = re.findall('\d+\.?\d*\*\d+\.?\d*', e)
for x in result:
    lst = x.split("*")
    print lst
    e = e.replace(x, str(float(lst[0])*float(lst[1])))

したがって、"1.0*1.0"1.0 で出力されるはずですが、100.0 で出力されます。これは正規表現によるものです。

print lst は ["1.0", "1.0"] ではなく ["10", "10"] で出力されるため、それ以降の行ではないと言えます。何か案は?

私の理解では、+1つ以上?は0または1を*意味し、0以上を意味します

4

1 に答える 1

0

入力文字列は 10*10 しか入っていなかったので、明らかに何か間違ったことをしました。別のモジュールでは、ここにこのコードがあり、小数を追加する前に行われました...

acceptedChars = set(string.digits + "[]()+-/*^=!<>" + string.letters)
newL = ''.join([ x for x in e if x in acceptedChars])
e = newL

これは削除されることを意味していた.ので、これを再度追加する必要がありました。だから今、私はこのコードを使用しています:

acceptedChars = set(string.digits + "[]()+-/*^=!<>." + string.letters)
newL = ''.join([ x for x in e if x in acceptedChars])
e = newL

他の誰かがそこにあるはずの数学記号を考えることができれば、それは将来役立つでしょう. ありがとう。

于 2012-08-16T21:06:10.637 に答える