tryusing System.Text.RegularExpressions;
string s= @"<td><table><tr><td span=2>aa</td><td><p>b<br>b</td></tr></table></td>
<td><table><tr><td><font size=21>cc</font></td><td><br>dd
</td></tr></table></td>
";
Regex re = new Regex("<td[^>]*>(?></?T[^>]*>(?<TD>)|.)*(?(TD)(?!))</td>", RegexOptions.IgnoreCase|RegexOptions.Singleline);
foreach(Match m in re.Matches(s))
Console.WriteLine(m.Value);