Regex especial para cuerdas en python

Tengo una cadena como la de abajo.

s = ({[test1, test2; test3 (Nuevo)]})

Ahora tengo una expresión regular que eliminará los paréntesis y la convertirá en la lista. Incluso si se separan con a; b, c gusta. REGEX:

output = [i for i in re.split(r'\s*[(){}\[\],;\'"]\s*', s) if i] 

Pero esta expresión regular también está eliminando los corchetes de los elementos de la lista. ( (Nuevo) en mi caso)

Cómo aplicar esta expresión regular para el inicio y final de la cadena. Sé que se puede hacer usando ^ pero no estoy seguro de cómo?

Rendimiento esperado

[‘test1’, ‘test2’, ‘test3 (New)’]

Salida proveniente de la expresión regular anterior

[‘test1’, ‘test2’, ‘test3’, ‘Nuevo’]

¿Alguna ayuda?

 s = '({[test1, test2 ; test3 (New) ]})' 

Según su comentario a continuación, asumo que el número de corchetes de apertura de toda la cadena es igual al número de corchetes de cierre.

Por lo tanto, si se eliminan primero los soportes externos, se debe saber su número:

 m = re.match('[({[]*', s) n_brckt = m.span()[1] - m.span()[0] 

Luego retire los soportes externos (- dependiendo de si se encontró alguno …):

 if n_brckt > 0: s = s[n_brckt:-n_brckt] s = s.strip() In: s Out: 'test1, test2 ; test3 (New)' 

Luego, puede dividir en todas las apariciones de comas o dos puntos, opcionalmente, seguido de un espacio:

 In: re.split('[,;]+ *', s) Out: ['test1', 'test2', 'test3 (New)'] 

Utilizando re.search

 import re s = "({[test1, test2 ; test3 (New) ]})" m = re.search("\[(.*?)\]", s) if m: #print(m.group(1).replace(";", ",").split(",")) print([i.strip() for i in m.group(1).replace(";", ",").split(",")]) 

Salida:

 ['test1', 'test2', 'test3 (New)']