正则表达式科学记数法

时间:2015-02-17 14:04:08

标签: python regex

我需要浮动以下代表科学记数法值的字符串而不使用指数:

'-1.366-6'
'1.366-6'
'-1.366+6'
'1.366+6'
'-1.25-10'

我需要插入一个' e'在最后的+或 -

之前
'-1.366e-6'
'1.366e-6'
'-1.366e+6'
'1.366e+6'
'-1.25e-10'

如何使用正则表达式实现此目的?

2 个答案:

答案 0 :(得分:1)

您需要使用re.sub

re.sub(r'(?=[-+][^-+]*$)', 'e', string)

以上正则表达式与最后+-字符后面的边界匹配。

DEMO

示例:

>>> import re
>>> l = ['-1.366-6', '1.366-6', '-1.366+6', '1.366+6', '-1.25-10']
>>> for i in l:
        print(re.sub(r'(?=[-+][^-+]*$)', 'e', i))


-1.366e-6
1.366e-6
-1.366e+6
1.366e+6
-1.25e-10

答案 1 :(得分:0)

请注意

re.sub(r'(?=[-+][^-+]*$)', 'e', '+1.3666')

返回'e+1.3666'。如果您希望它返回'+1.3666',那么您可以使用

re.sub(r'(?<=\d)(?=[+-])', 'e', text)

代替。


import re

tests = [
('-1.366-6', '-1.366e-6'),
('1.366-6',  '1.366e-6' ),
('-1.366+6', '-1.366e+6'),
('1.366+6',  '1.366e+6' ),
('-1.25-10', '-1.25e-10'),
('+1.366', '+1.366'),
]

for text, expected in tests:
    result = re.sub(r'(?<=\d)(?=[+-])', 'e', text)
    print(result)
    assert result == expected

产量

-1.366e-6
1.366e-6
-1.366e+6
1.366e+6
-1.25e-10
+1.366

模式(?<=\d)(?=[+-])表示

(?<=      # match if preceded by 
\d        # a digit
 )    
(?=       # match if followed by
[+-]      # a literal plus or minus sign
 )