How to write Regular Expression for recursive matching?

J. Clifford Dyer jcd at sdf.lonestar.org
Mon Nov 26 18:34:59 CET 2007


On Mon, Nov 26, 2007 at 06:04:54PM +0100, Diez B. Roggisch wrote regarding Re: How to write Regular Expression for recursive matching?:
> 
> lisong wrote:
> 
> > Hi All,
> > 
> > I have problem to split a string like this:
> > 
> > 'abc.defg.hij.klmnop'
> > 
> > and I want to get all substrings with only one '.' in mid. so the
> > output I expect is :
> > 
> > 'abc.defg', 'defg.hij', 'hij.klmnop'
> > 
> > a simple regular expression '\w+.\w' will only return:
> > 'abc.defg', 'hij.klmnop'
> > 
> > is there a way to get 'defg.hij' using regular expression?
> 
> Nope. Regular expressions can't get back in their input-stream, at least not
> for such stuff.
> 
> The problem at hand is easily solved using
> 
> s = 'abc.defg.hij.klmnop'
> 
> pairs = [".".join(v) for v in zip(s.split(".")[:-1], s.split(".")[1:])]
> 

which is veritably perlesque in its elegance and simplicity!

A slightly more verbose version.

l = s.split('.')
pairs = []
for x in xrange(len(l)-1):
	pairs.append('.'.join(l[x:x+2]))

Cheers,
Cliff



More information about the Python-list mailing list