Сравнение с шаблоном регулярного выражения в IEnumerable<T> вместо строковых символов в C#
Я пытаюсь изменить список инструкций кода CIL в C#. Общие задачи включают в себя поиск групп или шаблонов инструкций и замену их другими инструкциями при повторном использовании некоторой информации из исходного соответствия. Это звучит очень похоже на регулярные выражения, за исключением того, что мой вариант использования находится в списках экземпляров определенного типа вместо символов в строке.
Я могу написать некоторый базовый код для поиска и сопоставления материала и заменить его, но мне интересно, есть ли более общий подход с синтаксисом регулярных выражений, такой как "x?" Или "(a|b)+" или "(a+)b*(c+")) ", Но с a, b, c - это не символы, а экземпляры класса. Желательно со ссылками на захваченные части в результирующем выражении. Я знаю, что определенные шаблоны, такие как "начало слова" или "пробел", не имеют смысла.
В моей библиотеке патчей с открытым исходным кодом Harmony я представляю коды операций и их операнды в пользовательском типе кортежа, и сопоставление с образцом должно работать в IEnumerable и, в конце концов, создавать новый IEnumerable в результате.
Есть ли общий алгоритм сопоставления с образцом, который я могу расширить, чтобы архивировать это?