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

本文关键字:更简单 数据 | 更新日期: 2023-09-27 18:03:35

我有matchCollection。我需要基团索引为1。现在我从大量的强制转换中取出数据,我想避免它。

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

我需要得到"texttext"没有<a></a>

 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;
 } 

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

出于各种原因,我建议您使用Html Agility Pack来解析Html而不是正则表达式。

因此,要将它应用到您的示例中,在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);
        }
    }
}

您可以使用捕获组。您可能还希望使用命名组。请注意我在regex中添加的括号。

        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);
        }