По сути, я согласен с приведенными выше советами: использование регулярных выражений для синтаксического анализа HTML требует, чтобы когда-нибудь был нарушен код на странных допустимых HTML-конструкциях (не говоря уже о некорректном HTML, который принимают браузеры ...). Поиск и использование хорошего анализатора HTML может быть полезным во многих отношениях ...
Теперь я прагматичен (и не могу устоять перед небольшим вызовом регулярных выражений ...), и иногда я использую RE против сгенерированного машиной HTML (часто это функция экспорта), потому что я знаю, что структура, которую я вижу, вряд ли изменится В отличие от страниц, созданных вручную, где автор может делать опечатки ... Это в основном для быстрого взлома, который я могу адаптировать, если выходные данные когда-либо изменятся.
В вашем случае HTML-код достаточно регулярный, линейный и предсказуемый, поэтому RE довольно прост. Я даю код Java, потому что я не знаю C #, но адаптация должна быть тривиальной.
Pattern p = Pattern.compile("(<SPAN id.*?<SPAN id.*?</SPAN></SPAN>)");
Matcher m = p.matcher(html);
while (m.find())
{
System.out.println(m.group(1));
}
НТН.