2015-02-16 5 views
1

Мне нужно эффективно встретить матчи Python Regex. Findall и finditer работают, но медленны для большое количество поисков.Подсчет регулярных выражений Python Эффективно

До сих пор у меня есть это (очень упрощенный вариант):

import re 
testItem = re.compile(r"var") 
for matches in testItem.finditer(stringData): 
    counter = counter + 1 
return counter 

Я бегу несколько экземпляров этого метода. Я не забочусь о самих матчах; Я просто хочу вернуть счетчик.

Проблема в том, что stringData - очень большая строка. Само Regex довольно просто.

Просьба сообщить об этом более эффективном способе.

Заранее спасибо.

+0

ли регулярное выражение для одной строки быстро? Это значительно медленнее для длинных строк? –

+0

'sum (testItem.finditer (stringData))' – SethMMorton

+0

Проблема в том, что строка очень длинная. Вот почему это медленно. Само регулярное выражение простое. – dapirate7

ответ

0

Поскольку вы показываете в вашем редактировании, что вы просто ищете подстроки,

stringData.count('var') 

должен служить вам хорошо.

Конечно, это не обобщает многие другие применения RE! К сожалению, по крайней мере, в Python 3.4, re.finditer возвращает итератор, который не поддерживает «длину» намек формализованного по PEP 424, так что не так много хороших альтернатив (для общего случая) к

sum(1 for _ in there.finditer(stringData)) 
+0

Отсутствие разницы в производительности. Запустите его с помощью timeit с 10 итерациями. Regex был 2.437s, подстрока была 2.64s. – dapirate7

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