Extrair texto entre tags HTML (LINQ+Regex)

Hoje o meu colega de trabalho pediu-me para o ajudar a extrair uma parte do texto de uma página p/ ser posteriormente enviado.

Não se trata nada de complexo, apenas apeteceu-me deixar aqui p/ consultar mais tarde caso precise 🙂

O HTML da página que deve ser pesquisado é algo como:

<TD valign=top colspan=6>TESTE 1XPTO ONLINE</TD>

</p>

Para o fazer, fiz o seguinte código:

Regex r = new Regex("<TD(.*?)>(.*?)</TD>");
string s = @"TESTE 1XPTO ONLINE</pre>


            <TD valign=top colspan=6>TESTE 2XPTO ONLINE</TD>
            <TD valign=top colspan=6>TESTE 3XPTO ONLINE</TD>
            <TD valign=top colspan=6>TESTE 4XPTO ONLINE</TD>
            <TD valign=top colspan=6>TESTE 5XPTO ONLINE</TD>"</span>;
 
MatchCollection mc = r.Matches(s);
foreach (Match m in mc)
{
    Console.WriteLine(m.Groups[2].Value.Trim());
}
</div>

Outra forma de fazer o mesmo, e recorrendo ao LINQ, é esta:

var q = from Match m in new Regex(@"<TD(.*?)>(.*?)</TD>").Matches(s)
        select m.Groups[2].Value.Trim();
 
q.ToArray<string>().ToList().ForEach(new Action<string>(EnviarSinais));

Por fim, basta criar a função EnviarSinais:

static void EnviarSinais(string str)
{
        Console.WriteLine(str);
}

Quanto ao código em LINQ, se houver melhor forma de o fazer, indiquem pf 🙂