.NET正则表达式在td,span,标记之间的内部文本

时间:2010-05-20 06:33:10

标签: c# regex

<table >
    <tr>
        <td colspan="2" style="height: 14px">
            tdtext1
            <a>hyperlinktext1<a/> 
        </td>
    </tr>
    <tr>
        <td>
            tdtext2
        </td>
        <td>
            <span>spantext1</span>
        </td>
    </tr>
</table>   

这是我的示例文字。 如何在C#中编写正则表达式以获取tdspan,超链接的innertext的匹配

3 个答案:

答案 0 :(得分:7)

每次我在同一句话中听到正则表达式和HTML时,我都会感到畏缩。我建议查看CodePlex上的HtmlAgilityPack,它是一个非常宽容的HTML解析器,允许您对解析的文档使用XPath查询。它更干净,继承你代码的人会感谢你!

修改

根据下面的评论,这里有一些如何获取这些标签的InnerText的例子。非常简单。

var doc = new HtmlDocument();
doc.LoadHtml("...your sample html...");

// all <td> tags in the document
foreach (HtmlNode td in doc.DocumentNode.SelectNodes("//td")) {
    Console.WriteLine(td.InnerText);
}

// all <span> tags in the document
foreach (HtmlNode span in doc.DocumentNode.SelectNodes("//span")) {
    Console.WriteLine(span.InnerText);
}

// all <a> tags in the document
foreach (HtmlNode a in doc.DocumentNode.SelectNodes("//a")) {
    Console.WriteLine(a.InnerText);
}

答案 1 :(得分:0)

        static void Main(string[] args)
    {
        //...
       // using (WebClient client = new WebClient()) // WebClient class inherits IDisposable
       // {
        HtmlDocument doc = new HtmlWeb().Load("http://www.freeclup.com");

            foreach (HtmlNode span in doc.DocumentNode.SelectNodes("//span"))
            {
                Console.WriteLine(span.InnerText);
            }
            Console.ReadKey();

      //  }
    }

答案 2 :(得分:-1)

您可以使用以下内容:

        const string pattern = @"[a|span|td]>\s*?(?<text>\w+?)\s*?</\w+>";
        Regex regex = new Regex(pattern, RegexOptions.Singleline);
        MatchCollection m = regex.Matches(x);
        List<string> list = new List<string>();

        foreach (Match match in m)
        {
            list.Add(match.Groups["text"].Value);
        }