String splitting with exceptions
wxjmfauth at gmail.com
wxjmfauth at gmail.com
Thu Aug 29 03:26:26 EDT 2013
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, johnl at 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
More information about the Python-list
mailing list