如何将HTML元素与正则表达式匹配?

时间:2011-01-28 15:18:44

标签: c# regex .net-4.0

以下代码不起作用,我试图从HTML表中检索TR字符串。此代码或任何其他解决方案是否存在任何问题?

public static List<string> GetTR(string Tr)
{
    List<string> trContents = new List<string>();

    string regexTR = @"<(tr|TR)[^<]+>((\s*?.*?)*?)<\/(tr|TR)>";

    MatchCollection tr_Matches = Regex.Matches(Tr, regexTR, RegexOptions.Singleline);
    foreach (Match match in tr_Matches)
    {
        trContents.Add(match.Value);
    }

    return trContents;
}

示例输入字符串如下:

"<TR><TD noWrap align=left>abcd</TD><TD noWrap align=left>SPORT</TD><TD align=left>5AT</TD></TR>"

4 个答案:

答案 0 :(得分:6)

使用正则表达式解析HTML是一件麻烦事。

使用HTML Agility Pack等内容正确完成工作。

答案 1 :(得分:0)

我认为这个正则表达式会更合适:

<(tr|TR)[^>]*>.*<\/\1>

答案 2 :(得分:0)

此正则表达式匹配您的输入字符串:

<(tr|TR)+>((\s*?.*?)*?)<\/(tr|TR)>

我删除了“[^&lt;]”...不确定为什么需要它。另外,尝试添加一个非贪婪的比赛...

然而,最好选择像HTML Agility Pak这样的东西(如果你想保持理智):)

答案 3 :(得分:0)

(<(tr|TR)[^<]*>)(.+)((<\(tr|TR)[^<]*>)