import re
def count_overlapping(string, pattern):
regex = '{}(?={})'.format(re.escape(pattern[:1]), re.escape(pattern[1:]))
it = re.finditer(regex, string)
# Consume iterator, get count with minimal memory usage
return sum(1 for _ in it)
mystr = '^_^_^-_-'
print(count_overlapping(mystr, '^_^'))
print(count_overlapping(mystr, '-_-'))
print(count_overlapping(mystr, ''))
print(count_overlapping(mystr, 'x'))
aW1wb3J0IHJlCgpkZWYgY291bnRfb3ZlcmxhcHBpbmcoc3RyaW5nLCBwYXR0ZXJuKToKICAgIHJlZ2V4ID0gJ3t9KD89e30pJy5mb3JtYXQocmUuZXNjYXBlKHBhdHRlcm5bOjFdKSwgcmUuZXNjYXBlKHBhdHRlcm5bMTpdKSkKICAgIGl0ID0gcmUuZmluZGl0ZXIocmVnZXgsIHN0cmluZykKICAgICMgQ29uc3VtZSBpdGVyYXRvciwgZ2V0IGNvdW50IHdpdGggbWluaW1hbCBtZW1vcnkgdXNhZ2UKICAgIHJldHVybiBzdW0oMSBmb3IgXyBpbiBpdCkKCm15c3RyID0gJ15fXl9eLV8tJwpwcmludChjb3VudF9vdmVybGFwcGluZyhteXN0ciwgJ15fXicpKQpwcmludChjb3VudF9vdmVybGFwcGluZyhteXN0ciwgJy1fLScpKQpwcmludChjb3VudF9vdmVybGFwcGluZyhteXN0ciwgJycpKQpwcmludChjb3VudF9vdmVybGFwcGluZyhteXN0ciwgJ3gnKSk=