Python Regexp неправильное выражение
Задача гласит:
Текстовый файл содержит только заглавные буквы латинского алфавита (ABC…Z). Определите количество групп из идущих подряд не менее 12 символов, которые начинаются и заканчиваются буквой E и не содержат других букв E (кроме первой и последней) и букв F.
Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Написал код:
import re
with open("24.txt") as file:
readyLines = re.findall("E[^FE]*E", file.readline())
print(len(readyLines))
Ответ (14100) не совпадает с правильным (9655) Неправильная регулярка?
UPD1:
Итак, благодаря комментариям стало понятно, что способ, который я использовал (Помимо, ошибочной регулярки) был неверным.
Фильтрация по длине, даже с регуляркой (UPD2)
"E[^FE]*(?=E)" была бы неверной. Поскольку, как и указал мистер @CrazyElf , не отберёт все необходимые выражения.
Но основной ошибкой было неиспользование "lookahead assertion" (?=...), позволяющей не "забывать" использовать E как начало новой подстроки.
Итоговый, работающий код:
import re
with open("24.txt") as file:
readyLines = re.findall("E[^FE]{10,}(?=E)", file.readline())
print(len(readyLines))
--> 9655
UPD2:
Чтож, фильтрация была бы верной, в отличии от написанного мною в первом апдейте, но нужно было бы учитывать факт отсутствия последней буквы E, поэтому код выглядел бы именно так:
import re
with open("24.txt") as file:
readyLines = re.findall("E[^FE]*(?=E)", file.readline())
print(len([x for x in readyLines if len(x) >= 11]))