>>> import re
>>> text = '1011101111'
>>> len(re.findall('(?=11)', text))
5
Если вы не хотите загружать весь список совпадений в память, это никогда не будет проблемой! Вы могли бы сделать это, если бы вы действительно хотели:
>>> sum(1 for _ in re.finditer('(?=11)', text))
5
Как функция (re.escape
гарантирует, что подстрока не мешает регулярному выражению):
>>> def occurrences(text, sub):
return len(re.findall('(?={0})'.format(re.escape(sub)), text))
>>> occurrences(text, '11')
5