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新结果?

4

1 回答 1

3

您正在寻找:

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

于 2013-04-04T15:08:29.333 回答