Хитро, до такой степени, что невозможно сделать совершенно автоматически - если только вы не можете сделать некоторые очень удобные предположения об исходном HTML (что это небольшое подмножество всех возможных HTML, что было известно, что оно соответствует определенному предсказуемому узоры). Я думаю, в конце концов, придется вручную редактировать.
Сказав это, и извиняясь за то, что не включили какой-либо действительный код C #, вот как я мог бы подойти к нему.
Давайте пошагово разберемся с проблемой, где мы сначала преобразуем общие шаблоны. Цель состоит в том, чтобы после каждого шага уменьшать количество оставшихся символов ^.
Итак, во-первых, регулярное выражение заменяет множество очень распространенных буквенных паттернов
^p^ -> <p>
^div^ -> <div>
^/div^ -> <div>
и т.д..
Затем замените шаблоны, содержащие необязательный текст, например
^link[anything-except-^]^ -> <link[original-text]>
и так далее. Мой подход заключается в замене только ожидаемых шаблонов, и таким образом избегайте ложных совпадений. Затем выполняйте итерации с другими шаблонами, пока не останется ^ символов. Это требует много проверки данных и множества шаблонов. Это грубая сила, не умная, но ты идешь.