Найпростіше це зробити рекурсією.
Функція приймає рядок і відсоток (спершу - 100%). Ділите рядок (у вашому випадку - по | поза {}) на групи, кожній групі задаєте відсоток. Далі для тих груп, де є підгрупи, викликаєте цю ж функцію з відсотком для цих груп.
Але, здається, ви обрали неправильну структуру даних, рядок не дуже зручна штука для такого. Яке загальне завдання? Тут немає часом проблеми XY?
Тут питання, як зробити поділ, щоб він був по "|" поза "{}".