Strange re behavior: normal?

Michael Janssen Janssen at
Sun Aug 17 19:06:48 CEST 2003

Robin Munn wrote:
> How is re.split supposed to work? This wasn't at all what I expected:

>>>>import re
>>>>re.split(r'\b', 'a b c d')
> ['a b c d']

the code (INSTALL_DIR/Modul/_sre.c function pattern_split) seems to show 
this behavior on intention. At least this if-clause has no other purpose 
to my eyes:

         if (state.start == state.ptr) { # empty string? mj
             if (last == state.end)
             /* skip one character */
             state.start = (void*) ((char*) state.ptr + state.charsize);

Well, I belive it's good choice, to not split a string by an empty 
string, but when you really want (version with empty results on start 
and end omitted):

def boundary_split(s):
     back = []
     while 1:
             # r'.\b' and +1 prevents endless loop
             pos ='.\b', s, re.DOTALL).start()+1
         except AttributeError:
             if s: back.append(s)
         s = s[pos:]
     return back

boundary_split('a b c d')
#['a', ' ', 'b', ' ', 'c', ' ', 'd']

What's the good of splitting by boundaries? Someone else wanted this a 
few days ago on tutor and I can't figure out a reason by now.


More information about the Python-list mailing list