用正则表达式python替换

时间:2013-04-04 15:00:25

标签: python regex replace

我有fortran格式的数字字符串,看起来像0.1245-102 浮点转换不起作用,因为不期望格式:0.1245e-102

我使用此命令

re.sub(r"[0-9]-[0-9]",r"e-","0.1245-102")

我对正则表达式很新,通过这种方式我获得了0.124e-02 如何将5e-1保留在新结果中?

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