Forum

Пожалуйста or Регистрация для создания сообщений и тем.

Извлечь определенный текст и line

Всем привет! Ребятки подскажите пожалуйста как реализовать парсер по строке?

У нас есть такая строка: 2022/07/03 00:58:29 9865296 cff9459d [INFO Client 16916] @From <2EASY> TornadoMachine: Hey I'd like to join your 5 way as clients`
В ней есть Дата, время, 2 хэша, инфо клиент, @from, ник и сам текст сообщения.
Как правильно извлечь из этой строки нужные тебе данные?

Например добавив их в отдельные переменные:

data = 2022/07/03
time = 00:58:29
user = TornadoMachine
msg = Hey I'd like to join your 5 way as clients`

Буду очень благодарен за помощь или хотя бы примеры

Привет.
Написал небольшой пример для твоего случая, я постарался немного поиграть с кодом и, надеюсь, показать что-нибудь интересное, помимо решения проблемы.

Листинг
Модель

public class Message
{
    public Message(string user, string text, DateTime timestamp)
    {
        User = user;
        Text = text;
        Timestamp = timestamp;
    }

    public string User { get; init; }
    public string Text { get; init; }
    public DateTime Timestamp { get; init; }
}

Парсер

public class Parser
{
    private const int DateTimePartLength = 19;

    public static Message? Parse(string line)
    {
        // Извлечение данных по индексам
        // Лучше использовать AsSpan вместо Substring, т.к. TryParse принимает ReadOnlySpan<T>
        var isValid = DateTime.TryParse(line.AsSpan(0, DateTimePartLength), out var date);
        if (!isValid)
        {
            // Можно рассмотреть возможность использования исключений вместо возврата null или
            // более функционального подхода с условным классом Result<T>, т.е. объектом, указывающим на успех или неудачу
            return null;
        }

        var parts = line.Split(' ');

        // Предполагая, что формат – точный, можем вытащить нужные части из массива
        const int UserPartIndex = 9;

        // [..^1] — range operator (C# 8), чтобы не зацепить `:`
        // Также можно использовать Substring или даже TrimEnd
        // var user = parts[UserPartIndex].TrimEnd(':');
        var user = parts[UserPartIndex][..^1];

        // Сначала получаем IEnumerable<string> нужных элементов и обратно собираем из них строку
        var message = string.Join(' ', parts.Skip(UserPartIndex + 1));

        return new Message(user, message, date);
    }
}

Пример использования

public static void Main()
{
    var text = "2022/07/03 00:58:29 9865296 cff9459d [INFO Client 16916] @From <2EASY> TornadoMachine: Hey I'd like to join your 5 way as clients`";
    var response = Parser.Parse(text);
    Console.WriteLine(JsonSerializer.Serialize(response, new JsonSerializerOptions { WriteIndented = true }));
}

Конечно, всегда можно рассмотреть возможность использования регулярных выражений, но всё зависит от конкретного случая.
Удачи в учёбе / работе!

Большое спасибо @dapofig необычная и очень удобная реализация! Спасибо за столь развернутый пример, очень помог, я пробовал через регулярные выражения, но твой пример более удобный)