Search code examples
pythonregexsplit

Splitting a string representation of a nested list into string representations of the sublists


I have the following:

str = '[5.955894, 45.817792], [10.49238, 45.817792], [10.49238, 47.808381], [5.955894, 47.808381]'

I want to split it so that I have an array of strings like

['[5.955894, 45.817792]', '[10.49238, 45.817792]', ...]

So that the [...] objects are elements of the array. It is important that the enclosing [ and ] are included. I've come so far:

re.split('\D,\s\D', str)

But that gives me:

['[5.955894, 45.817792', '10.49238, 45.817792', '10.49238, 47.808381', '5.955894, 47.808381]']

Solution

  • I prefer to use re.findall and specify what I want instead of trying to describe the delimiter for re.split

    >>> s = '[5.955894, 45.817792], [10.49238, 45.817792], [10.49238, 47.808381], [5.955894, 47.808381]'
    >>> re.findall(r"\[[^\]]*\]",s)
    ['[5.955894, 45.817792]', '[10.49238, 45.817792]', '[10.49238, 47.808381]', '[5.955894, 47.808381]']
    
    1. \[ matches [
    2. [^\]]* matches anything but ]
    3. \] matches ]