procedure GetArticulList;
var
I: Integer;
begin
Memo2.Lines.Clear; //чистим мемо-получатель
Memo2.Lines.Delimiter := '|'; //устанавливаем разделитель
Memo2.Lines.DelimitedText := Memo1.Text; //записываем текст с разделителяим
for I := Memo2.Lines.Count - 1 downto 0 do //начиная с конца удаляем элементы коллекции,
//которые не подходят под маску артикула
begin
//во всех артикулах примера на шестой позиции стоит дефис
if (Copy(Memo2.Lines[I], 6, 1) <> '-') then
begin
Memo2.Lines.Delete(i);
end;
end;
end;
В отличии от примера выше скушает даже два артикула в одной строке:)