我在读一个文件中的几行,我想匹配成float,
下面是一个简单的例子:

import re
regex="[-+]?[0-9]+\.?[0-9]+([eE][-+]?[0-9]+)?"
string="0.00000000000000000E0   0.00000000000000000E0   0.00000000000000000E0"´
print(re.findall(regex,string))

,这给了我
['E0', 'E0', 'E0']

而不是预期的
['0.00000000000000000E0', '0.00000000000000000E0', '0.00000000000000000E0']

最佳答案

将regex更改为

regex=r"[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?"
                  ^          ^^

关键是使用非捕获组而不是捕获组,这样findall就不必只返回捕获的文本(当模式中没有定义捕获组时,re.findall将返回整个匹配的文本)。
另外,始终使用原始字符串文本来定义regex模式,以避免任何其他误解。
APython demo
import re
regex=r"[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?"
string="0.00000000000000000E0   0.00000000000000000E0   0.00000000000000000E0"
print(re.findall(regex,string))

10-07 15:44