Я пытаюсь выучить регулярные выражения с. net core. В частности, я пытаюсь использовать их для анализа списка встроенных ресурсов в сборке, как показано ниже.
Шаблон регулярного выражения
^([\w\._])*((?<create>\.Postgres.Create\.)|(?<drop>\.Postgres.Drop\.)([\w\._]))*$
Пример текста, сгенерированного из списка встроенных ресурсов
Mynamespace.Postgresql.Create.select_course_units.sql
Mynamespace.Postgresql.Drop.drop_select_course_units.sql
Mynamespace.Postgresql.Create.select_units.sql
Mynamespace.Postgresql.Drop.drop_select_units.sql
...
Регулярное выражение имеет две именованные группы захвата для Postgres .Create и Postgres .Drop захватывает, соответственно. Мое регулярное выражение находит оба совпадения, но в записях ничего не сохраняется для создания или удаления групп. Можно ли заставить его хранить записи, чтобы можно было определить, содержит ли совпадение создание или отбрасывание?
public void ReadCreateStoredProcedures()
{
const string pattern = @"^([\w\._])*((?<create>\.Postgres.Create\.)|(?<drop>\.Postgres.Drop\.)([\w\._]))*$";
Regex rx = new Regex(pattern, RegexOptions.Compiled | RegexOptions.Multiline);
string[] resNames = typeof(CourseContext).Assembly.GetManifestResourceNames();
string text = string.Join("\n",resNames);
MatchCollection matches = rx.Matches(text);
foreach(Match match in matches)
{
Console.WriteLine($"Matched{match.Value}");
GroupCollection col = match.Groups;
int lC = col["create"].Length;
int lD = col["drop"].Length;
Console.WriteLine($"Total Create Captures : {lC}");
Console.WriteLine($"Total Drop Captures : {lD}");
foreach(var capture in col["create"].Captures)
{
Console.WriteLine($"Create Capture :: {@capture}");
}
foreach (var capture in col["drop"].Captures)
{
Console.WriteLine($"Drop Capture :: {@capture}");
}
}
}