我在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