我怎样才能获得更简单的数据

时间:2011-07-24 12:36:21

标签: c# regex match

我有matchCollection。 我需要组索引1。 现在我从大量演员阵容中取出数据,我想避免使用它。

示例:startTag = <a>,endTag = </a> Html = <a>texttexttext</a>

我需要使用<a></a>

获取“texttexttext”
 var regex = new Regex(startTag + "(.*?)" + endTag, RegexOptions.IgnoreCase);
 var matchCollection = regex.Matches(html);
 foreach (var item in matchCollection)
 {

      string temp = ((Match)(((Group)(item)).Captures.SyncRoot)).Groups[1].Value;
 } 

2 个答案:

答案 0 :(得分:2)

我建议您使用Html Agility Pack来解析HTML而不是various reasons的正则表达式。

因此,要在HTML文档中查找所有锚文本,将其应用于您的示例:

using System;
using System.Net;
using HtmlAgilityPack;

class Program
{
    static void Main()
    {
        string html = "";
        using (var client = new WebClient())
        {
            html = client.DownloadString("http://stackoverflow.com");
        }

        var doc = new HtmlDocument();
        doc.LoadHtml(html);
        foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a"))
        {
            // Will print all text contained inside all anchors 
            // on http://stackoverflow.com
            Console.WriteLine(link.InnerText);
        }
    }
}

答案 1 :(得分:1)

您可以使用捕获组。您可能还想使用命名组。注意我添加到正则表达式的括号。

        var html = "<a>xx yyy</a>   <a>bbb cccc</a>";
        var startTag = "<a>";
        var endTag = "</a>";
        var regex = new Regex(startTag + "((.*?))" + endTag, RegexOptions.IgnoreCase);
        var matchCollection = regex.Matches(html);
        foreach (Match item in matchCollection)
        {
            var data = item.Groups[1];
            Console.WriteLine(data);
        } 

这甚至更好一些,因为命名组更容易抓住。

        var html = "<a>xx yyy</a>   <a>bbb cccc</a>";
        var startTag = "<a>";
        var endTag = "</a>";
        var regex = new Regex(startTag + "(?<txt>(.*?))" + endTag, RegexOptions.IgnoreCase);
        var matchCollection = regex.Matches(html);
        foreach (Match item in matchCollection)
        {
            var data = item.Groups["txt"];
            Console.WriteLine(data);
        }