Se me ocurre algo como esto:
Código Delphi
[-]
var
i: Integer;
Lista: TstringList;
begin
Str := '((@1545+@888)*@8881)';
for i:= Length(Str) downto 1 do
if not (Str[i] in ['@','0'..'9']) then
delete(Str,i,1);
Lista:= TStringList.Create;
try
Lista.Delimiter:= '@';
Lista.DelimitedTex:= Str;
Lista
finally
Lista.Free;
end;