Допустим, есть строка вроде этой:
string txt = "Lore ipsum {{abc|prop1=\"asd\";prop2=\"bcd\";}} asd lore ipsum";
Информация, которую я хочу извлечь "abc" и такие пары, как ("prop1", "asd"), ("prop3", "bcd"), где каждая пара использовала a; в качестве разделителя.
Edit1: (на основе кода MikeB)
Ах, приближаемся. Я узнал, как разобрать следующее:
string txt = "Lore ipsum {{abc|prop1=\"asd\";prop2=\"http:///www.foo.com?foo=asd\";prop3=\"asd\";prop4=\"asd\";prop5=\"asd\";prop6=\"asd\";}} asd";
Regex r = new Regex("{{(?<single>([a-z0-9]*))\\|((?<pair>([a-z0-9]*=\"[a-z0-9.:/?=]*\";))*)}}", RegexOptions.Singleline | RegexOptions.IgnoreCase);
Match m = r.Match(txt);
if (m.Success)
{
Console.WriteLine(m.Groups["single"].Value);
foreach (Capture cap in m.Groups["pair"].Captures)
{
Console.WriteLine(cap.Value);
}
}
Вопрос 1: Как мне настроить регулярное выражение так, чтобы оно говорило «каждое значение пары ограничено только \»? Я добавил символы типа «.», «;» и т. д., но я не могу вспомнить ни одного символа, который я хочу разрешить. С другой стороны, было бы намного лучше.
Вопрос 2 : Как мне отрегулировать работу этого регулярного выражения с этой штукой здесь?
string txt = "Lore ipsum {{abc|prop1=\"asd\";prop2=\"http:///www.foo.com?foo=asd\";prop3=\"asd\";prop4=\"asd\";prop5=\"asd\";prop6=\"asd\";}} asd lore ipsum {{aabc|prop1=\"asd\";prop2=\"http:///www.foo.com?foo=asd\";prop3=\"asd\";prop4=\"asd\";prop5=\"asd\";prop6=\"asd\";}}";
Поэтому я, вероятно, попытался бы получить группы из {{...}} и использовать другое регулярное выражение?