Один метод, который я использую в PHP для подобных вещей, - это заменить самую глубокую точку вложенного выражения (в данном случае, "{x (a, b, cd)}") символом, таким как '¶1', затем сохраните его проанализированное значение (будучи [('x', ['a'], ['b'], ['c-d'])]) в переменную $ nest1.
Вы сейчасиметь исходную строку 'a, "b, c, d", {x (a, b, cd)}', похожую на 'a, "b, c, d", ¶1', которая анализируется так же, как первые три,Затем просто найдите в результирующем массиве все, что начинается с '¶', и замените его соответствующей переменной.
Этот метод поддерживает столько уровней, сколько вы хотите, просто продолжайте циклически повторяться до тех пор, пока все символы не исчезнут.Например,
'a,"b,c,d",{x(a,b,{y(j,k,l-m)},c-d)}'
'a,"b,c,d",{x(a,b,¶1,c-d)}' and $nest1=[('y',['j'],['k'],['l-m'])]
'a,"b,c,d",¶2' and $nest2=[('x',['a'],['b'],['¶1'],['c-d'])]
['a'],['b','c','d'],['¶2']
['a'],['b','c','d'],[('x',['a'],['b'],['¶1'],['c-d'])]
['a'],['b','c','d'],[('x',['a'],['b'],[('y',['j'],['k'],['l-m'])],['c-d'])]
В целях безопасности вы можете даже избежать любого экземпляра ¶, который мог произойти в строке, прежде чем вносить изменения, а затем удалить их как последний шаг, если считаете, что это необходимо.
Я не знаю Python, поэтому он может работать не так, как PHP.Возможно, вам придется использовать массив вместо динамических переменных.