我在FORTRAN格式的數字字符串看起來像這樣0.1245-102
浮充轉換不起作用,因爲沒有預期格式爲:0.1245e-102
用正則表達式替換蟒
我使用這個命令
re.sub(r"[0-9]-[0-9]",r"e-","0.1245-102")
我對正則表達式很陌生,用這種方法我獲得0.124e-02
我該如何將5e-1
保留爲新結果?
我在FORTRAN格式的數字字符串看起來像這樣0.1245-102
浮充轉換不起作用,因爲沒有預期格式爲:0.1245e-102
用正則表達式替換蟒
我使用這個命令
re.sub(r"[0-9]-[0-9]",r"e-","0.1245-102")
我對正則表達式很陌生,用這種方法我獲得0.124e-02
我該如何將5e-1
保留爲新結果?
您正在尋找:
r'(?<=\d|\.)-(?=\d)'
其中-
如果有前後位或點),和數字相匹配。
演示:
>>> exponent = re.compile(r'(?<=\d|\.)-(?=\d)')
>>> exponent.sub('e-', '0.1245-102')
'0.1245e-102'
>>> float(exponent.sub('e-', '0.1245-102'))
1.245e-103
>>> float(exponent.sub('e-', '1-10'))
1e-10
>>> float(exponent.sub('e-', '1.-10'))
1e-10
>>> float(exponent.sub('e-', '-1-10'))
-1e-10
同時處理-
和D+
(陰性和陽性指數),你可以使用:
r'(?<=\d|\.)D?(?=(?:\+|-)\d)
這將允許並更換可選D
,留下-
或+
代替時:
>>> exponent = re.compile(r'(?<=\d|\.)D?(?=(?:\+|-)\d)')
>>> float(exponent.sub('e', '0.1245-102'))
1.245e-103
>>> float(exponent.sub('e', '456D+5'))
45600000.0
確實允許D
也在-
之前,所以0.1245D-102
也是有效的,但它簡化了替換處理。
爲什麼不簡單地''0.1245-102'.replace(' - ','e - ')'? – 2013-04-04 15:02:18
@PavelAnossov - 負號失敗 – mgilson 2013-04-04 15:02:41
@mgilson:oops。 – 2013-04-04 15:03:36