Вы ищете:
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
Этот делает, а также , также предшествует -
, поэтому 0.1245D-102
также будет действительным, но это упростит обработку замены.
Почему бы не просто «0.1245-102'.replace ('-', 'e -')'? –
@PavelAnossov - сбой для отрицательных чисел – mgilson
@mgilson: oops. –