2016-07-07 6 views
3

Я читал несколько строк из файла, которые я хочу, чтобы соответствовать, чтобы быть поплавки, здесь минимальный пример:REGEX в Python соответствует только показатель

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'] 

ответ

3

Измените регулярное выражение для

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

Дело в том, чтобы использовать не-захватив группу вместо захвата одного, так что findall не должен возвращать только захваченный текст (если нет захватывая групп, определенных в шаблоне, re.findall будет возвращать целое согласованные тексты).

Кроме того, используйте строковый литерал всегда, чтобы определить шаблон регулярного выражения, чтобы избежать других недоразумений.

Python demo:

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

Спасибо много, потребовалось больше времени, чем это должно иметь :) –

Смежные вопросы