我有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 :(得分: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
也有效,但它简化了替换处理。