2013-04-04 55 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