Использование Python 2.6.6.Выполнение инкрементного поиска регулярных выражений в огромных строках (Python)
Я надеялся, что модуль повторно при условии некоторого метода поиска, который имитировал путь str.find() работает, что позволяет указать начальный индекс, но, видимо, не ...
- поиска() позволяет мне найти первый матч ...
- FindAll() будет возвращать все (не перекрывающихся!) матчей одного шаблона
- finditer() подобен FindAll(), но с помощью итератора (более эффективно)
H это ситуация ... Я добычу данных в огромных блоках данных. Для частей синтаксического анализа регулярное выражение работает отлично. Но как только я нахожу определенные соответствия, мне нужно переключиться на другой шаблон или даже использовать более специализированный синтаксический анализ, чтобы найти, где начать поиск в следующем. Если re.search позволил мне указать начальный индекс, это было бы прекрасно. Но в отсутствие этого, я смотрю на:
- Использование finditer(), но пропуская вперед, пока не дойду до индекса, который прошел, где я хочу возобновить использование re. Потенциальные проблемы:
- Если встроенные двоичные данные, случается, содержат матч, который перекрывается законный матч только после того, как бинарный кусок ...
- Поскольку я не ищу одного рисунка, я должен жонглировать несколько итераторов, которые также имеют возможность ложного совпадения, скрывающего реальный.
- Нарезка, т. Е. Создание копии оставшейся части данных каждый раз, когда я хочу снова выполнить поиск.
- Это было бы надежным, но заставило бы много «ненужного» копирования на данные, которые могут быть много мегабайт.
- Я бы предпочел сохранить его таким образом, чтобы все совпадающие местоположения были индексами в один исходный объект строки, так как я могу некоторое время на них нависнуть и хочу их сравнить. Поиск последующих совпадений в отдельных разрезанных копиях - это сложность бухгалтерского учета.
- Только что пришло в голову, что я могу использовать подход «вращающегося буфера», но не продумал его полностью. Это может привести к большой сложности кода.
У меня отсутствуют какие-либо очевидные альтернативы? Не уверен, будет ли способ обернуть огромную строку классом, который будет обслуживать фрагменты ... Или фрагментацию итератора или «строкового курсора» идиомы?
Возможный дубликат [Python: найти регулярное выражение в файле] (http://stackoverflow.com/questions/4989198/python-find-regexp-in-a-file) –
@SeanVieira: Да, сходства, но далеки от дублировать. mmap не решает проблему инкрементного поиска, а предложение, ориентированное на линию, даже хуже, чем нарезание ... –
re.seaarch() имеет начальный аргумент, pos - http://docs.python.org/2.6 /library/re.html#re.RegexObject.search – wwii