Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как оптимизировать регулярки


Автор: ViperYa 23.8.2010, 08:58
Привет всем. Подскажите, можно ли упростить данное регулярное выражение:
^[^a-zа-яё]+ (Вытаскивает все небуквенные символы в начале предложения)
[^a-zа-яё)]+$ (Вытаскивает все небуквенные символы, кроме закрывающей скобки в конце предложения)

И еще: Есть List<string> Words со словами. Нужно подчеркнуть все все вхождения слов коллекции в тексте. Подскажите, как будет быстрее по скорости так:
Код

foreach (string word in Words)
            {
                MatchCollection matches = Regex.Matches(rtbSource.Text, "\\b" + word + "\\b", RegexOptions.IgnoreCase);
                foreach (Match match in matches)
                {
                    Application.DoEvents();
                    rtbSource.Select(match.Index, word.Length);
                    rtbSource.SelectionColor = col;
                }
            }

или если в регулярку записать все слова через "|" и весь текст прогнать по регулярке..?

Автор: ИванМ 23.8.2010, 15:10
ViperYa, вы ошиблись разделом. Ищите раздел про .NET и c# 

Автор: jonie 23.8.2010, 18:19
ViperYa, для вашей задачи решулярки вообще не нужны.
Например для первой регулярки: Вам надо пробежаться по String-у посимвольно и каждый символ сравнивать на попадание в два диапазона ['a';'Z'] и ['а','Я'] (в кодировке UCS-2 (aka урезанная utf16) указанные символы идут подряд). Вот и всё.

Насчет linq: используйте String.FindFirstOf() в цикле, релугярка тут тоже не нужна.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)