Это похоже на проблему RegEx:)
Вот регулярное выражение, которое соответствует одной строке (с именованными группами захвата)
^\[(?'dateTime'.+)\] \[(?'output'.+)\] : \((?'type'.+)\) (?'user'.+): (?'message'.+)$
Ссылка на Regexr для онлайн-тестирования : https://regexr.com/421p4
Поскольку я использовал .+
для всех областей, ограничений для символов нет. Он может сломаться (например, если до и после :
нет места). Но его можно еще улучшить, чтобы сделать его более гибким. Если хотите, я могу написать один.
Кроме того, если вы используете метод, подобный file.ReadAllText()
, вам нужно использовать многострочный флаг, чтобы соответствовать всем строкам. (Regex.Match(input, pattern, RegexOptions.Multiline)
)
В противном случае (например, если вы перебираете строки), это не имеет значения, потому что в строке нет \n
.
код C #
using System.Text.RegularExpressions;
// ...
string pattern = @"^\[(?<dateTime>.+)\] \[(?<output>.+)\] : \((?<type>.+)\) (?<user>.+): (?<message>.+)$";
string message = "[2018-10-25 19:40:34] [Output] : (CHAT-Type) User: message";
var match = Regex.Match(message, pattern);
Вы можете получить доступ к совпадениям через переменную match
, например:
match.Groups["dateTime"].Value; // "2018-10-25 19:40:34"
match.Groups["user"].Value; // "User"
match.Groups["message"].Value; // "message"