Here is a way to do it without RegEx:
class Program
{
static void Main(string[] args)
{
string fileName = "CheckFileList.txt";
Dictionary<string,List<string>> sections = GenerateList(fileName);
foreach (string sectionName in sections.Keys)
{
foreach (string file in sections[sectionName])
Console.WriteLine(string.Format("Section {0} : File {1}", sectionName, file));
}
Console.ReadKey();
}
public static Dictionary<string,List<string>> GenerateList(string fileName)
{
string[] fileLines = File.ReadAllLines(fileName);
string currentSection = string.Empty;
Dictionary<string,List<string>> retVal = new Dictionary<string,List<string>>();
for (int i = 0; i < fileLines.Length; i++)
{
if (fileLines[i].StartsWith("["))
{
if (string.IsNullOrEmpty(currentSection))
{
currentSection = fileLines[i].TrimStart('[').TrimEnd(']');
retVal[currentSection] = new List<string>();
}
else
{
if (fileLines[i].StartsWith("[/"))
currentSection = string.Empty;
else
throw new Exception("Invalid section identifier " + fileLines[i] + " line " + i);
}
continue;
}
if (!string.IsNullOrEmpty(currentSection))
retVal[currentSection].Add(fileLines[i]);
}
return retVal;
}
}
</string>
The dictionary contains the sections in the file as keys, and then a list of files in that section. This is also expandable to more sections or different names.
And I think its much more maintainable than a RegEx.