Problems with parsing data_path can occur when the user gives entities names containing apostrophes(names containing quotes will not work in driver data_paths). Such will still work in drivers, i.e:

    """pose.bones["Bone'bla'"].location.x"""

So we can assume every name has to be enclosed with `[""]` in such datastring that drivers will accept:

    def split_path(data_path):
        '''
        Split a data_path into parts
        '''
        if not data_path:
            return []
        
        # extract names from data_path
        names = data_path.split('"')[1::2]
        data_path_no_names = ''.join(data_path.split('"')[0::2])
        
        # segment into chunks
        data_chunks = data_path_no_names.split('.')
        
        # put names back into chunks where [] are
        for id, chunk in enumerate(data_chunks):
            if chunk.find('[]') > 0:
                data_chunks[id] = chunk.replace('[]', '[' + names.pop(0) + ']')
        
        return data_chunks

The part `# segment into chunks` is just basic, some more advanced segmenting can be implemented (for example one that will understand `location.x` is one thing or that will extract correct target.id and target.data_path)