Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Поиск строк в тексте без учёта содержимого скобок в Delphi

Delphi , Компоненты и Классы , TMemo и TRichEdit

Вопрос пользователя касается реализации функции поиска в тексте с использованием компонента RichEdit в Delphi, при этом необходимо игнорировать строки, содержащие текст в скобках. Примером такого текста могут служить строки с кодом CNC, где текст в скобках является комментарием. Пользователь хочет найти все строки, содержащие определённую подстроку (в данном случае 'T'), но только те, которые не содержат эту подстроку внутри скобок.

Для решения задачи можно использовать регулярные выражения, доступные в Delphi начиная с версии XE. Регулярные выражения позволяют задать сложные условия поиска, включая игнорирование определённых частей текста.

Вот пример кода, который демонстрирует использование регулярных выражений для поиска искомых строк в тексте:

uses
  RegularExpressions;

procedure TMainForm.ToolButton3Click(Sender: TObject);
var
    Regex: TRegEx;
    MatchResult: TMatch;
    RE: TRichEdit;
begin
    RE := (ActiveMDIChild as TMDIChild).RichEdit1;
    // Инициализация регулярного выражения
    Regex := TRegEx.Create('^\w+T\w+(?![^(]*\))', [roMultiLine]);
    // Поиск всех совпадений в тексте RichEdit
    MatchResult := Regex.Match(RE.Text);
    while MatchResult.Success do
    begin
        // Получение позиции и длины совпадения для выделения
        RE.SelStart := MatchResult.Index;
        RE.SelLength := MatchResult.Length;
        // Выделение найденной строки
        RE.SetFocus;
        RE.SelText := '#FF0000'; // Выделение красным цветом
        MatchResult := MatchResult.NextMatch;
    end;
    // Освобождение регулярного выражения
    Regex.Free;
end;

В данном примере используется регулярное выражение ^\w+T\w+(?![^(]*\)), которое означает:

  • ^ - начало строки
  • \w+ - одна или более буквенно-цифровых символов или подчёркиваний
  • T - буква 'T'
  • \w+ - одна или более буквенно-цифровых символов или подчёркиваний
  • (?![^(]*\)) - отрицательный просмотр вперёд, который гарантирует, что после найденной подстроки 'T' не следуют скобки

Параметр [roMultiLine] указывает, что символы начала и конца строки (^ и $) должны соответствовать началу и концу каждой строки в тексте, а не только началу и концу всего текста.

При нажатии на кнопку ToolButton3 функция ToolButton3Click будет выполнять поиск и выделение строк, соответствующих заданному условию, в тексте RichEdit.

Это решение позволяет пользователю быстро находить все строки с кодом инструмента 'T', игнорируя строки с комментариями, и подсвечивать их в тексте.

Создано по материалам из источника по ссылке.

Вопрос касается реализации функции поиска в тексте с использованием компонента RichEdit в Delphi с игнорированием текста в скобках, для чего применяются регулярные выражения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TMemo и TRichEdit ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 08:55:07/0.0031890869140625/0