Найти строки в кавычках первого уровня, игнорируя вложенные в них кавычки - C#
Формулировка задачи:
Есть вот такая строка:
""дата "о дате"""""R'0'T'A'0'1'1'3'2"R'1'S'string here'"3"R'2'S'boxed string'"4"R'3'0'1'1"R'1'"2"R'2'"3"R'4'C'4'0'4'"R'2'""R'5'S'text value 2'""R'6'S'text value 3'""R'6'""4"R'7'C'3'0"R'8'S'list prop'"1'4'"R'9'S'text value 1'""R'5'""R'9'""5"R'10'0'1'1"R'1'"2"R'2'"""""
Очень страшная и некрасивая, мне необходимо поделить ее на части:""дата "о дате""""
"R'0'T'A'0'1'1'3'2"R'1'S'string here'"3"R'2'S'boxed string'"4"R'3'0'1'1"R'1'"2"R'2'"3"R'4'C'4'0'4'"R'2'""R'5'S'text value 2'""R'6'S'text value 3'""R'6'""4"R'7'C'3'0"R'8'S'list prop'"1'4'"R'9'S'text value 1'""R'5'""R'9'""5"R'10'0'1'1"R'1'"2"R'2'"""""
Данные постоянно меняются, они не статичны. Пробoвал такие варианты: @"(^"").*("")" @"(?![""]).*(?< ![""])" @"(^""[^""""]*"")(""""$)" @"^""([^""]*("")*(\\[^""])*)*"""Решение задачи: «Найти строки в кавычках первого уровня, игнорируя вложенные в них кавычки»
textual
Листинг программы
public static string[] Split(string str) { string partPattern = @"[A-Z0-9]+(')(?:''|[^'])*'"; string bodyPattern = @"[A-Z0-9]+("")|"""; int g = 0, n = 0; var parts = Regex.Matches(str, partPattern).Cast<Match>().ToArray(); return Regex.Matches(str, bodyPattern).Cast<Match>() .Where(x => !parts.Any(y => { return x.Index >= y.Index && x.Index + x.Length <= y.Index + y.Length; })) .Concat(parts) .OrderBy(x => x.Index) .GroupBy(x => { string s = x.Groups[1].Value; if(n == 0 && (s == "'" || s == "\"")) g++; if(s == "\"") n++; if(x.Value == "\"") n--; return g; }) .Select(x => { Match m1 = x.First(); Match m2 = x.Last(); return m1 == m2 ? str.Substring(m1.Index, m1.Length) : str.Substring(m1.Index, m2.Index - m1.Index + m2.Length); }) .ToArray(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д