Le mercredi 28 août 2013 18:44:53 UTC+2, John Levine a écrit : > I have a crufty old DNS provisioning system that I'm rewriting and I > > hope improving in python. (It's based on tinydns if you know what > > that is.) > > > > The record formats are, in the worst case, like this: > > > > foo.[DOM]::[IP6::4361:6368:6574]:600:: > > > > What I would like to do is to split this string into a list like this: > > > > [ 'foo.[DOM]','','[IP6::4361:6368:6574]','600','' ] > > > > Colons are separators except when they're inside square brackets. I > > have been messing around with re.split() and re.findall() and haven't > > been able to come up with either a working separator pattern for > > split() or a working field pattern for findall(). I came pretty > > close with findall() but can't get it to reliably match the > > nothing between two adjacent colons not inside brackets. > > > > Any suggestions? I realize I could do it in a loop where I pick stuff > > off the front of the string, but yuck. > > > > This is in python 2.7.5. > > > > -- > > Regards, > > John Levine, jo...@iecc.com, Primary Perpetrator of "The Internet for > Dummies", > > Please consider the environment before reading this e-mail. http://jl.ly
---------- Basic idea: protect -> split -> unprotect >>> s = 'foo.[DOM]::[IP6::4361:6368:6574]:600::' >>> r = s.replace('[IP6::', '***') >>> a = r.split('::') >>> a ['foo.[DOM]', '***4361:6368:6574]:600', ''] >>> a[1] = a[1].replace('***', '[IP6::') >>> a ['foo.[DOM]', '[IP6::4361:6368:6574]:600', ''] jmf -- http://mail.python.org/mailman/listinfo/python-list