Обрезать строки через Regex
Подскажите пожалуйста, как обрезать строку вида
{"Name","ПетровА"},
{"Run mode","E"},
{"IsMono","N"},
{"Date&Time","00.00.2021,00:00:00"},
{"ComputerName","PC,pid=0000,spid=0,ip=192.168.0.0"}
чтоб на выходе, получать лишь содержимое вторых кавычек. Пробелов в них не бывает, но вот бывают точки, запятые. Что то вроде такого
ПетровА
E
N
25.10.2021,07:10:53
А последнюю строку еще больше разбить надо. Отдельно название PC, pid, spid, ip.
Я регулярные совершенно не понимаю( Если в наглую нельзя, то был бы рад ссылкам на материалы для изучения.
Ответы (1 шт):
Паттерн получился такой {"(.*?)","(.*?)"}. Советую сайт https://regex101.com/ для тестирования регулярок - один из лучших, на мой взгляд.
static void Main(string[] args)
{
string text = @"{""Name"",""ПетровА""},
{""Run mode"",""E""},
{""IsMono"",""N""},
{""Date&Time"",""00.00.2021,00:00:00""},
{""ComputerName"",""PC,pid=0000,spid=0,ip=192.168.0.0""}";
var entries = ParseEntries(text);
foreach (var entry in entries)
{
Console.WriteLine($"{entry.Key}: {entry.Value}");
}
Console.WriteLine(new string('-', 15));
string computerName = entries["ComputerName"];
Dictionary<string, string> computer = computerName.Split(',')
.Skip(1)
.Select(pair => pair.Split('=').ToArray())
.ToDictionary(pair => pair[0], pair => pair[1]);
foreach (var pair in computer)
{
Console.WriteLine($"{pair.Key}: {pair.Value}");
}
Console.ReadKey();
}
private static Dictionary<string, string> ParseEntries(string text)
{
Dictionary<string, string> entries = new Dictionary<string, string>();
foreach (Match match in Regex.Matches(text, @"{""(.*?)"",""(.*?)""}"))
{
entries[match.Groups[1].Value] = match.Groups[2].Value;
}
return entries;
}
Вывод в консоль
Name: ПетровА
Run mode: E
IsMono: N
Date&Time: 00.00.2021,00:00:00
ComputerName: PC,pid=0000,spid=0,ip=192.168.0.0
---------------
pid: 0000
spid: 0
ip: 192.168.0.0
Если структура данных константная, то можно и в класс распарсить с соответствующими свойствами. Но я остановился на словаре как на более общем решении.