function TForm1.ParsePairOfDelimiter(const AStr: string; const APair1, APair2: Char; AList: TStringList; const IsIgnoreSpace: Boolean = True): Integer;var TmpStr: string; iPre, iEnd: Integer;begin Result := 0; iPre := 1; iEnd := Length(AStr); if iPre >= iEnd then Exit; TmpStr := AStr; iPre := Pos(APair1, TmpStr); iEnd := LastDelimiter(APair2, TmpStr); // 如果只有 APair1, 而没有成对的 APair2,则取 APair1 之后的所有字符串 // 如果要求 APair1, APair2 必须成对出现,则隐掉此句 if (iEnd = 0) and (iPre > 0) then iEnd := Length(TmpStr) + 1; while iPre < iEnd do begin TmpStr := Copy(TmpStr, iPre + 1, iEnd - iPre -1); if not IsIgnoreSpace or (TmpStr <> '') then begin Inc(Result); if AList <> nil then AList.Add(TmpStr); end; iPre := Pos(APair1, TmpStr); iEnd := LastDelimiter(APair2, TmpStr); // 如果只有 APair1, 而没有成对的 APair2,则取 APair1 之后的所有字符串 // 如果要求 APair1, APair2 必须成对出现,则隐掉此句 if (iEnd = 0) and (iPre > 0) then iEnd := Length(TmpStr) + 1; end;end;procedure TForm1.btn1Click(Sender: TObject);var list: TStringList;begin list := TStringList.Create; try if ParsePairOfDelimiter(edt1.Text, '(', ')', list) > 0 then Memo1.Lines := list; finally list.Free; end;end;