Я на самом деле пытаюсь сделать то же самое, что и компилятор asp.net, чтобы скомпилировать разметку в дереве управления сервером, регулярное выражение активно используется компилятором asp.net. У меня есть временное решение, хотя и не хорошее, но, кажется, все в порядке.
//string source = "<h1>hello</h1>";
string source = "<h1>hello<img moduleType=\"calendar\" /></h1> <p> <img moduleType=\"calendar\" /> </p> <h2>bye</h2> <img moduleType=\"calendar\" /> <p>sss</p>";
Regex exImg = new Regex("(.+?)(<img.*?/>)");
var match = exImg.Match(source);
int lastEnd = 0;
while (match.Success)
{
Console.WriteLine(match.Groups[1].Value);
Console.WriteLine(match.Groups[2].Value);
lastEnd = match.Index + match.Length;
match = match.NextMatch();
}
Console.WriteLine(source.Substring(lastEnd, source.Length - lastEnd ));