найти стартовый "item" и скобку за ним, запомнить позицию.
объявить переменную "счетчик скобок" со значением = 1
затем перебирать посимвольно, считая кол-во открытых скобок, за каждую открытую добавлять +1, за каждую закрытую - отнимать.
когда счетчик дойдет до нуля - запомнить позицию последней скобки.
взять все что между первой и последней.
edward_freedom, ну, я написал как разобрать те данные, что автор привел в примере. И переделывать не буду.
У меня был кейс, когда данные приходили с разметкой в виде круглых скобочек, причем иногда внутри полей был текст, в котором тоже попадались неэкранированные скобочки.
Переделать источник данных никак нельзя было.
Выручил простенький конечный автомат с несколькими счетчиками, который вычислял где разделение полей, а где прсто текст. И понадобилось всего строк 30 кода, и парсил данные за один проход.