#c# #asp.net-core #stringreader #stringwriter
#c# #asp.net-core #stringreader #stringwriter
Вопрос:
У меня есть строка из журнала:
2020-09-07 14:41:17.268 01:00 [Information] Hello, Serilog!
Я хотел бы извлечь слово Information
из string
, однако это изменится, как могло бы быть debug
, или на любом другом известном уровне ведения журнала.
Я также хотел бы сообщение, которое через один пробел после ]
которого в данном случае является Hello, Serilog!
. Это также может быть изменено, но оно не будет длиннее существующего сообщения.
Строка поступает из StringReader
using (StringReader reader = new StringReader(message.ToString())) // message from StringWriter
{
var readText = reader.ReadLine();
Console.WriteLine(readText);
}
Каков наилучший способ сделать это?
Комментарии:
1. Поскольку строка всегда будет содержать скобки,
[]
вы можете разделить строку на последнюю]
и получить все, что после, в качестве сообщения и все, что до[
, в качестве типа журнала. или вы можете использовать регулярное выражение.2. Спасибо, я просто смотрю на регулярное выражение сейчас
3. Если вы пытаетесь анализировать журналы, возможно, было бы проще выводить журналы в формате JSON, если для вас это возможно.
Ответ №1:
Использование регулярного выражения приведет к Information: Hello, Serilog!
string type;
string message;
string text = "2020-09-07 14:41:17.268 01:00 [Information] Hello, Serilog!";
string pattern = "\[(.*?)\]";
var match = Regex.Match(text, pattern);
if (match.Success)
{
type = match.Groups[1].Value;
message = text.Substring(match.Groups[1].Index match.Groups[1].Length 1);
Console.WriteLine(type ": " message);
}
Ответ №2:
Регулярное выражение можно использовать следующим образом:
var regex = new Regex("\[([^\]] )\]");
var match = regex.Match(readText);
if (match.Success)
{
var value = match.Groups[1].Value;
// value == "Information" or whatever between [ and ]
}
else
{
// Handle pattern not matching
}