Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#子字符串-解析中间的所有文本_C#_Substring - Fatal编程技术网

c#子字符串-解析中间的所有文本

c#子字符串-解析中间的所有文本,c#,substring,C#,Substring,尝试解析下面html代码中的所有文本(主要是url)。但我只想获取这些div标记(result firstline title)和(result url js result url)之间的url,用于每个(所有)事件 要明确的是,我能够从下面的html源抓取所有的url,但问题是它也抓取了url几乎3次。为此,我有一个修复程序,可以删除重复的url,但是,如果仔细查看html源代码,您会发现它也会捕获第三个url <div class="result js-result card-mobi

尝试解析下面html代码中的所有文本(主要是url)。但我只想获取这些div标记(result firstline title)和(result url js result url)之间的url,用于每个(所有)事件

要明确的是,我能够从下面的html源抓取所有的url,但问题是它也抓取了url几乎3次。为此,我有一个修复程序,可以删除重复的url,但是,如果仔细查看html源代码,您会发现它也会捕获第三个url

<div class="result js-result card-mobile ">
<div class="result-firstline-container">
    <div class="result-firstline-title">
        <a
            class="result-title js-result-title"

            href="https://www.lifewire.com/top-social-networking-sites-people-are-using-3486554"

        >
            The Top Social Networking Sites People Are Using
        </a>
    </div>

</div>

<a
    class="result-url js-result-url"

    href="https://www.lifewire.com/top-social-networking-sites-people-are-using-3486554">https://www.lifewire.com/top-<b>social-networking-sites</b>-people-are...
</a>
<p class="result-snippet">
    The Top
</p>
</div>

<div class="result js-result card-mobile ">
    <div class="result-firstline-container">
        <div class="result-firstline-title">
            <a
                class="result-title js-result-title"

                href="http://www.ebizmba.com/articles/social-networking- websites"

            >
                Top 15 Most Popular Social Networking Sites | January 2019
            </a>
        </div>

    </div>

    <a
        class="result-url js-result-url"

        href="http://www.ebizmba.com/articles/social-networking- websites">www.ebizmba.com/articles/<b>social-networking</b>-<b>websites</b>
    </a>
    <p class="result-snippet">
        Top 15 Most 
    </p>

</div>     
要获取url,我使用以下方法:

var regexURLParser=new Regex(@“(http ^ ftp ^ https):\/\/([\w\-\+(?:(?:\.[\w\-\+)+))([\w\-,@^=%&;:/\+\\\\\\\%*[\w\-\\\\^=%&;/\++\+\\\\\\+++)”,RegexOptions.single RegexOptions.single RegexOptions.CultureInvariant)

我想从以下内容中获取url:

        <a
            class="result-title js-result-title"

            href="https://www.lifewire.com/top-social-networking-sites-people-are-using-3486554"

        >

        <a
            class="result-title js-result-title"

            href="http://www.ebizmba.com/articles/social-networking-websites"

        >

通过使用NuGet将其包含在项目中,您可以使它变得更容易

使用NuGet添加HTMLAgilityPack

转到
软件包管理器控制台
并键入
安装软件包HtmlAgilityPack-版本1.11.3

安装后,您可以提取URL,如下所示

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(@"put html string here");

var listOfUrls = new List<string>();
doc.DocumentNode.SelectNodes("//a").ToList()
   .ForEach(x=> 
           {
              //Use HasClass method to filter elements 
              if (!string.IsNullOrEmpty(x.GetAttributeValue("href", "")) 
                   && x.HasClass("result-title") && x.HasClass("js-result-title"))
              {
                 listOfUrls.Add(x.GetAttributeValue("href", ""));
              }
           });

listOfUrls.ForEach(x => Console.WriteLine(x));

为了人类的利益,。让你的生活简单很多,并使用AngleSharp。@NPras为什么要使用XML?我遗漏了什么吗?@sLw HTML是多种XML,因此XML解析器可能会简化这个问题的解决方案。如果我们学究的话,从技术上讲HTML不是严格的XML()。但该示例似乎是一个格式正确的XML片段,因此一个简单的XML解析器很可能可以工作。HTML解析器可能更重,您需要依赖第三方代码。好的,这个方法也会获取第二个url,因为它位于href属性中。我只需要这个(class=“result title js result title”)标记后面的url。@Buddhihin要用class过滤元素,可以使用
HasClass
方法。请看编辑。谢谢,我试过你的第二种方法,它很有效。这样做比正则表达式快吗?还有,还有其他方法可以实现吗?是的,还有其他方法可以实现同样的效果,Regex可以更快,但不适合这样做。如果你觉得这很有帮助,那么就接受这个答案,这样其他人就可以从中受益。
https://www.lifewire.com/top-social-networking-sites-people-are-using-3486554
http://www.ebizmba.com/articles/social-networking-websites 
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(@"put html string here");

var listOfUrls = new List<string>();
doc.DocumentNode.SelectNodes("//a").ToList()
   .ForEach(x=> 
           {
              //Use HasClass method to filter elements 
              if (!string.IsNullOrEmpty(x.GetAttributeValue("href", "")) 
                   && x.HasClass("result-title") && x.HasClass("js-result-title"))
              {
                 listOfUrls.Add(x.GetAttributeValue("href", ""));
              }
           });

listOfUrls.ForEach(x => Console.WriteLine(x));
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(@"put html string here");

var listOfUrls = doc.DocumentNode.Descendants("a")
    .Where(x => x.Attributes["class"] != null 
                && x.Attributes["class"].Value == "result-title js-result-title")
    .Select(x => x.GetAttributeValue("href", "")).ToList();