2016-09-09 10 views
0

Я использую C# Winforms RichTextBox для загрузки и отображения некоторых лог-файлов. Эти лог-файлы используют символы символов ANSI для раскрашивания лог-файлов.C# Winforms Search Начало и конец строки и выбор

Нашли несколько примеров, чтобы найти и выделить строку поиска, но я хочу найти начальную и конечную строки, получить эти выделения и раскрасить содержимое между ними.

Пример: previous text ESC[36m SOME LOG CONTENT ESC[0m Some more text

Так что я могу загрузить и поиск строк, но я не был успешным, чтобы создать функцию, которая поиск ESC[36m как первая строку и ESC[0m как вторая строка, а затем вернуть его TextRange поэтому я могу выделить его после.

UPDATE Чтобы уточнить, я не просто нужен текст между строковым поиском 1 и строкой-поиском-2, мне нужен TextRange, который выбирает текст, так что я могу изменить форматирование.

+0

Недавно я был в очень похожей ситуации и в итоге использовал элемент управления WebBrowser. Это даст вам намного больше контроля над шрифтом, цветом и т. Д. Кроме того, можно легко сделать его похожим на RichTextBox. – Hele

+0

Существует множество примеров поиска строки между двумя строками в StackOverflow. Примеры [1] (http://stackoverflow.com/questions/17252615/get-string-between-two-strings-in-a-string)/[2] (http://stackoverflow.com/questions/1717611/ find-a-string-between-2-known-values)/[3] (http://stackoverflow.com/questions/13780654/extract-all-strings-between-two-strings) – Equalsk

+0

Все эти примеры возвращают найденные строка между двумя строками. Мне нужен выбор TextRange. – YvesR

ответ

1

Попробуйте использовать регулярные выражения. Это должно сделать это.

rtb.Text = "previous text ESC[36m SOME LOG CONTENT ESC[0m Some more text"; 

Regex regex = new Regex(@"ESC\[36m(.*?)ESC\[0m", RegexOptions.Multiline); 
foreach (Match m in regex.Matches(rtb.Text)) 
{ 
    rtb.Select(m.Index + 7, m.Value.Length - 13); 
    rtb.SelectionColor = Color.Aqua; 
} 
+0

Я попробую это как можно скорее и проголосую, если это сработает :) – YvesR

0

Вы можете сделать это, чтобы найти текст между:

 string test = "ESC[36m SOME LOG CONTENT ESC[0m Some more text"; 
     int FirstIndex = test.IndexOf("ESC[36") + 7;    
     test = test.Substring(FirstIndex,(test.Length-(FirstIndex+1))); 
     int LastIndex = test.IndexOf("ESC[0"); 
     test = test.Substring(0, LastIndex); 

 Смежные вопросы

  • Нет связанных вопросов^_^