Как можно использовать регулярные выражения для выделения ключевых слов в тексте определенным цветом в консоли с помощью C#? У меня есть код, который, по-моему, должен работать, однако что-то идет не так. Можете ли вы помочь мне исправить его?
Для изменения цвета текста в консоли в C# можно использовать метод Console.ForegroundColor. Например, для изменения цвета текста на красный можно использовать следующий код: ``` Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Красный текст"); Console.ResetColor(); ``` Чтобы использовать регулярные выражения для выделения ключевых слов определенным цветом в консоли, вы можете сначала определить регулярное выражение для поиска ключевых слов, а затем использовать его вместе с методами Console.ForegroundColor и Console.ResetColor. Например: ``` string text = "Это текст с ключевыми словами в красном цвете"; string keyword = "ключевые слова"; Regex reg = new Regex(keyword); MatchCollection matches = reg.Matches(text); foreach (Match match in matches) { Console.Write(text.Substring(0, match.Index)); Console.ForegroundColor = ConsoleColor.Red; Console.Write(match.Value); Console.ResetColor(); Console.Write(text.Substring(match.Index + match.Length)); } ``` Если у вас возникли проблемы с кодом, не стесняйтесь задавать вопросы или предоставлять больше информации, чтобы мы могли помочь вам исправить его.
Вы изменяете цвет консоли внутри делегата с уже сформированной строкой. Как вариант, можно разделить текст на слова и выводить нужные слова с нужным цветом:
using System; using System.Text.RegularExpressions; public class Example { public static void Main(string[] args) { string text = "This is the great city of Sevsar, the harbor of humanity"; string[] keywords = { "great", "harbor" }; HighlightKeywords(text, keywords, ConsoleColor.Red); Console.WriteLine(); } public static void HighlightKeywords(string text, string[] keywords, ConsoleColor highlightColor) { string pattern = $@"\b({string.Join("|", keywords)})\b"; MatchCollection matches = Regex.Matches(text, pattern, RegexOptions.IgnoreCase); int lastIndex = 0; foreach (Match match in matches) { Console.Write(text.Substring(lastIndex, match.Index - lastIndex)); Console.ForegroundColor = highlightColor; Console.Write(match.Value); Console.ResetColor(); lastIndex = match.Index + match.Length; } Console.Write(text.Substring(lastIndex)); } }