Условная строка разделения с несколькими разделителями


У меня есть строка

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 2

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));
}