[Tutor] re.findall(), but with overlaps?

Kent Johnson kent37 at tds.net
Sat Sep 3 06:03:00 CEST 2005


Terry Carroll wrote:
> But he asked me, is there a standard method to get even overlapped
> strings?
> 
> After looking through the docs, I couldn't find a way to do this in 
> standard methods, so I gave him a quick RYO solution:
> 
> 
>>>>def myfindall(regex, seq):
> 
> ...    resultlist=[]
> ...    pos=0
> ...
> ...    while True:
> ...       result = regex.search(seq, pos)
> ...       if result is None:
> ...          break
> ...       resultlist.append(seq[result.start():result.end()])
> ...       pos = result.start()+1
> ...    return resultlist
> ...
> 
>>>>myfindall(rexp,sequence)
> 
> ['BAB', 'BEB', 'BIB']
> 
> But just curious; are we reinventing the wheel here?  Is there already a 
> way to match even overlapping substrings?  I'm surprised I can't find one.

AFAIK that is the way to do it.  You can shorten it a little by using result.group() instead of seq[result.start():result.end()].

Kent



More information about the Tutor mailing list