Как изменить цвет ключевых слов при выводе их на консоль?

Как можно использовать регулярные выражения для выделения ключевых слов в тексте определенным цветом в консоли с помощью C#? У меня есть код, который, по-моему, должен работать, однако что-то идет не так. Можете ли вы помочь мне исправить его?
  • 13 мая 2024 г. 12:00
Ответы на вопрос 2
Для изменения цвета текста в консоли в 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));
    }
}

Похожие вопросы