Условная строка разделения с несколькими разделителями
У меня есть строка
string astring="#This is a Section*This is the first category*This is the
second Category# This is another Section";
Я хочу разделить эту строку в соответствии с разделителями. Если у меня есть # в начале, это будет означать строку раздела (string[] section). Если строка будет начинаться с * , это будет означать, что у меня есть категория (string [] category). В результате я хочу иметь
string[] section = { "This is a Section", "This is another Section" };
string[] category = { "This is the first category ",
"This is the second Category " };
Я нашел этот ответ.: строка.сплит - путем многократного разделителем Но это не то, что я пытаюсь сделать.
2 ответа:
string astring=@"#This is a Section*This is the first category*This is the second Category# This is another Section"; string[] sections = Regex.Matches(astring, @"#([^\*#]*)").Cast<Match>() .Select(m => m.Groups[1].Value).ToArray(); string[] categories = Regex.Matches(astring, @"\*([^\*#]*)").Cast<Match>() .Select(m => m.Groups[1].Value).ToArray();
Со строкой.Split вы можете сделать это (быстрее, чем регулярное выражение ;))
List<string> sectionsResult = new List<string>(); List<string> categorysResult = new List<string>(); string astring="#This is a Section*This is the first category*This is thesecond Category# This is another Section"; var sections = astring.Split('#').Where(i=> !String.IsNullOrEmpty(i)); foreach (var section in sections) { var sectieandcategorys = section.Split('*'); sectionsResult.Add(sectieandcategorys.First()); categorysResult.AddRange(sectieandcategorys.Skip(1)); }