我在读一个文件中的几行,我想匹配成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))