Поиск и замена/удаление в тексте

Имею, к примеру, текст:Я приближался к месту моего назначения. Вокруг меня, прижимаясь к самой дороге, зеленел лес,изредка уступая место полянам, поросшим желтой осокою. Солнце садилось уже который час, все никак не могло сестьи висело низко над горизонтом. Машина катилась по узкой дороге, засыпанной хрустящим гравием.Крупные камни я пускал под колесо, и каждый раз в багажнике лязгали и громыхали пустые канистры.Нужно соединить разорвавшиеся предложения.Пробую искать в конце строки тег , и проверять, какой символ стоит перед ним.Если это строчная буква (рус/англ), или запятая, или цифра, то надо удалить  (точнее, заменить на пробел) из текущей строки и  из следующей. И соединить.Пока что меня застопорило на этапе определения символа, стоящего перед :
var i:integer;begini:=Pos('а</b>',RxRichEdit1.Text);   //Строчная буква "а" перед </b>while i>0 do                        //Если есть такая конструкция а</b>, нужно удалить </b>beginRxRichEdit1.Text:=Copy(RxRichEdit1.Text,1,i)+Copy(RxRichEdit1.Text,i+1+Length('</b>'),100000000000); //100000000000 - это если текста много...i:=Pos('а</b>',RxRichEdit1.Text);end;end;
Можно, конечно, написать такие куски кода для каждой строчной буквы для рус и англ алфавитов, и для запятой, но это очень нерационально.Применить такую вот конструкцию не получается:
varK:set of Char=['0'..'9', 'а'..'я', 'a'..'z', ','];i:=Pos(K+'</b>',RxRichEdit1.Text);         //Бред полнейший, но как-то так :(
Это, если бы переменная K была типа string, то получилось бы, а так...Подскажите, пожалуйста, если кто знает, как решить эту задачку.
8 ответов

procedure TForm1.Button1Click(Sender: TObject);var  S: String;begin  S := StringReplace(RxRichEdit1.Text, '<b>', '', [rfReplaceAll]);  S := StringReplace(S, ',</b>'#13#10, ', ', [rfReplaceAll]);  S := StringReplace(S, '</b>'#13#10, ' ', [rfReplaceAll]);  RxRichEdit1.Text := TrimRight(S);end;


Наверное тут помогут регулярные выражения.


StringReplace - классная функция, не знал.Спасибо огромное! 


Rrader, вообще, StringReplace лучше не использовать, там много реаллокаций памяти и конкатенаций. Я предпочитаю TStringBuilder, в нем грамотнее реализованы операции замены и т.п.


Keeper89, TStringBuilder появился только с D2009, а вообще ты мог бы и пример накатать  


Насчет версии - не известно, какая она у ТС, поэтому и предложил. Вечером доберусь до компьютера, накатаю  


У меня Delphi7 Enterprise.Описание StringReplace нашел сразу: http://www.delphibasics.ru/StringReplace.php, а вот TStringBuilder не нашел.StringReplace мне полностью подошла. А что, такая большая разница между ними?


Vladimir_K, разница есть, но раз Delphi седьмой - смысла нет.Просто приведу пример раз обмолвился:
procedure TForm1.btn1Click(Sender: TObject);begin  with TStringBuilder.Create(RxRichEdit1.Text) do    try      Replace('<b>', EmptyStr);      Replace('</b>'#13#10, ' ');      RxRichEdit1.Text := Trim(ToString);    finally      Free;    end;end;