我有 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)'
-
如果前面有数字或点,则匹配 a ,后面有数字。
演示:
>>> 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)
这将允许并替换一个 optional D
,在替换时将-
or留在原处:+
>>> 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
这确实允许 theD
也位于 , 之前-
,因此0.1245D-102
也有效,但它简化了替换处理。