uses
SysUtils, Classes, RegExpr;
procedure Extract(const AStr: string; const AList: TStringList);
var
E: TRegExpr;
begin
E := TRegExpr.Create('\(\d+\)|.');
try
if E.Exec(AStr) then
repeat
if E.Match[0][1] = '(' then
AList.Append(Copy(E.Match[0], 2, Length(E.Match[0]) - 2))
else
AList.Append(E.Match[0]);
until not E.ExecNext;
finally
E.Free;
end;
end;
var
S: string;
L: TStringList;
I: integer;
begin
S := '1110-00(12)1000011000000020(01)02(12)0000020300100204020-0000002021122222010023013322101002000';
L := TStringList.Create;
Extract(S, L);
for I := 0 to L.Count - 1 do WriteLn(L[I]);
L.Free;
end.