2013-04-04 94 views
0

我在FORTRAN格式的數字字符串看起來像這樣0.1245-102 浮充轉換不起作用,因爲沒有預期格式爲:0.1245e-102用正則表達式替換蟒

我使用這個命令

re.sub(r"[0-9]-[0-9]",r"e-","0.1245-102")

我對正則表達式很陌生,用這種方法我獲得0.124e-02 我該如何將5e-1保留爲新結果?

+0

爲什麼不簡單地''0.1245-102'.replace(' - ','e - ')'? – 2013-04-04 15:02:18

+0

@PavelAnossov - 負號失敗 – mgilson 2013-04-04 15:02:41

+0

@mgilson:oops。 – 2013-04-04 15:03:36

回答

3

您正在尋找:

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

是的,它聽起來像這樣。我忘記了積極的指數看起來像這樣「456D + 5」 – froggy 2013-04-04 15:16:21

+0

是的,但它沒有positif我有包括這個電話在一個嘗試 - 除了測試?或者是否有其他與編譯功能有關的事情? – froggy 2013-04-04 15:26:16

+0

你的正面指數*看起來像什麼?您可以嘗試:除了:'或者首先測試是否匹配。 – 2013-04-04 15:28:00