Convierte una cadena con paréntesis nesteds en una lista anidada, python

Hay otras preguntas que se refieren a esto en el desbordamiento de stack, como la forma de analizar una cadena y devolver una matriz anidada.

Pero todos se refieren a listas en el formato de ((abc)de(fg))) . yendo a la forma: [['a','b','c']'d','e'['f','g',]]] Tengo una lista de la forma:

 ((wordOneWord2)OtherWord(FinalWord))) 

Al usar los métodos que aprendí de las otras preguntas por lista anidada fue de la siguiente forma:

 [['w','o','r','d','O','n','e','W','o','r','d','2']'O','t','h','e','r','W','o','r','d',['F','i','n','a','l','W','o','r','d']]] 

en lugar de lo deseado

 [['wordOneWord2'], 'OtherWord', ['FinalWord']] 

Puedo lograr el resultado deseado al analizar la lista letra por letra y luego concatenar los elementos dentro de cada lista de nuevo, pero se necesita más código del que creo necesario. ¿Existe una forma más rápida de hacerlo?

Basado en esta solución por falsetru :

 import re def parse_nested(text, left=r'[(]', right=r'[)]', sep=r','): """ Based on https://stackoverflow.com/a/17141899/190597 (falsetru) """ pat = r'({}|{}|{})'.format(left, right, sep) tokens = re.split(pat, text) stack = [[]] for x in tokens: if not x or re.match(sep, x): continue if re.match(left, x): stack[-1].append([]) stack.append(stack[-1][-1]) elif re.match(right, x): stack.pop() if not stack: raise ValueError('error: opening bracket is missing') else: stack[-1].append(x) if len(stack) > 1: print(stack) raise ValueError('error: closing bracket is missing') return stack.pop() text = '((wordOneWord2)OtherWord(FinalWord))' print(parse_nested(text)) # [[['wordOneWord2'], 'OtherWord', ['FinalWord']]]