import re
def findall_overlapped(r, s):
res = [] # Resulting list
reg = r'^{}$'.format(r) # Regex must match full string
for q in range(len(s)): # Iterate over all chars in a string
for w in range(q,len(s)): # Iterate over the rest of the chars to the right
cur = s[q:w+1] # Currently tested slice
m = re.match(reg, cur) # If there is a full slice match
if m:
res.append(m.group(1)) # Append Group 1 value to the resulting list
return res
rx = r'foo", "(.*?)", "bar"'
text = '"lorem ipsum", "foo", "baz", "bar", "lorem ipsum", "bar", "ipsum", "foo", "baz", "bar"'
for s in findall_overlapped(rx, text):
print(s)
aW1wb3J0IHJlCgpkZWYgZmluZGFsbF9vdmVybGFwcGVkKHIsIHMpOgogIHJlcyA9IFtdICAgICAgICAgICAgICAgICAgICAgIyBSZXN1bHRpbmcgbGlzdAogIHJlZyA9IHInXnt9JCcuZm9ybWF0KHIpICAgICAgIyBSZWdleCBtdXN0IG1hdGNoIGZ1bGwgc3RyaW5nCiAgZm9yIHEgaW4gcmFuZ2UobGVuKHMpKTogICAgICAjIEl0ZXJhdGUgb3ZlciBhbGwgY2hhcnMgaW4gYSBzdHJpbmcKICAgIGZvciB3IGluIHJhbmdlKHEsbGVuKHMpKTogICMgSXRlcmF0ZSBvdmVyIHRoZSByZXN0IG9mIHRoZSBjaGFycyB0byB0aGUgcmlnaHQKICAgICAgICBjdXIgPSBzW3E6dysxXSAgICAgICAgICMgQ3VycmVudGx5IHRlc3RlZCBzbGljZQogICAgICAgIG0gPSByZS5tYXRjaChyZWcsIGN1cikgIyBJZiB0aGVyZSBpcyBhIGZ1bGwgc2xpY2UgbWF0Y2gKICAgICAgICBpZiBtOgogICAgICAgICAgICByZXMuYXBwZW5kKG0uZ3JvdXAoMSkpICAgICMgQXBwZW5kIEdyb3VwIDEgdmFsdWUgdG8gdGhlIHJlc3VsdGluZyBsaXN0CiAgcmV0dXJuIHJlcwoKcnggPSByJ2ZvbyIsICIoLio/KSIsICJiYXIiJwp0ZXh0ID0gJyJsb3JlbSBpcHN1bSIsICJmb28iLCAiYmF6IiwgImJhciIsICJsb3JlbSBpcHN1bSIsICJiYXIiLCAiaXBzdW0iLCAiZm9vIiwgImJheiIsICJiYXIiJwpmb3IgcyBpbiBmaW5kYWxsX292ZXJsYXBwZWQocngsIHRleHQpOgoJcHJpbnQocyk=
baz
baz", "bar", "lorem ipsum
baz", "bar", "lorem ipsum", "bar", "ipsum", "foo", "baz
baz