C # Выделите слова, которые заканчиваются двоеточием - PullRequest
1 голос
/ 06 декабря 2010

Я использую ScintillaNet, оболочку для элемента управления Scintilla в моем приложении C #. Я динамически добавляю все слова, оканчивающиеся на: (давайте просто назовем сейчас это ключевое слово). Я сделал это с помощью регулярного выражения строки ключевых слов, разделенных пробелами, каждый раз, когда пользователь нажимает клавишу с двоеточием. Вот мой код (в событии CharAdded):

        if (e.Ch == ':')
        {
            string wp = string.Empty;
            Regex r = new Regex(@"\b\w+[:\b]");
            MatchCollection m = r.Matches(Scintilla.Text);
            for (int i = 0; i < m.Count; i++)
            {
                wp += " " + m[i].Value.Substring(0, m[i].Value.Length - 1); // Remove the colon
            }
            wp = wp.ToLower();
            Scintilla.Lexing.Keywords[3] = wp;
        }

Теперь проблема в том, что каждый раз, когда вводится новое ключевое слово, и пользователь нажимает на двоеточие, вместо простого выделения ключевого слова, оно будет излишне выделять каждое ключевое слово в документе снова. Поэтому, хотя мое кодирование работает, это довольно плохое кодирование, и мне интересно, как я могу сделать свой код быстрее, только выделив последнее введенное ключевое слово. Любая помощь и / или идеи будут оценены.

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

На самом деле это не является ненужным. Вы можете проверить только последнее слово, но что если пользователь вставит длинный текст?Вы действительно должны проверять каждое слово одно за другим, если не уверены, что пользователь не вставит текст в элемент управления или не отредактирует середину текста.

1 голос
/ 06 декабря 2010

Если ваш текст действительно длинный и вы хотите улучшить время обработки, то как насчет попытки вставить скрытый тег, помечающий слова как «выделенные», и игнорируя их в регулярном выражении?

...