【问题标题】:Get multiple substrings from string [duplicate]从字符串中获取多个子字符串[重复]
【发布时间】:2014-10-03 09:05:48
【问题描述】:

所以我有 html 文件。我需要从中提取所有链接和图像。所以基本上我需要:

<a href="this_is_what_I_need"> 和 <img src="this_is_also_needed">

我逐行阅读文件并可以得到它,但只有第一个:

    List<string> links = new List<string>();
    if (line.Contains(@"<a href=""") || line.Contains(@"<img src="""))
    {
        if (line.Contains(@"<a href=""")
        {
            links.Add(line.Split(new string[] { @"<a href""" }, StringSplitOptions.None)[1].Split('"')[0]);
        }
        else
        {
            links.Add(line.Split(new string[] { @"<a href=""" }, StringSplitOptions.None)[1].Split('"')[0]);
        }
    }

但一行可能包含多个链接和/或图像。那么如何全部获取呢?

【问题讨论】:

  • 首先,最好知道什么是可变行。其次,在我看来,您需要一个 while 循环,直到到达文件末尾。而(!EOF)
  • 请改用 HTML Agility Pack 之类的工具 - 只需搜索所有“a”或“img”元素,然后获取“@href”属性。
  • 类似HTML Agility Pack 这样的任务比直接字符串操作要好。

标签: c# html string substring


【解决方案1】:

我认为您使用的方法不正确,我建议您看看像 HtmlAgilityPack 这样的报废工具,它已针对执行此类操作进行了优化

这里是使用 &lt;a href="" 执行此操作的示例,但您可以将其调整为 &lt;img src="""

HtmlDocument doc = new HtmlDocument();
doc.Load("mytest.htm");

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//a[@class='dn-index-link']"))
{
    Console.WriteLine("node:" + node.GetAttributeValue("href", null));
}

【讨论】:

  • 这也适用于 php 文件吗?
  • @fishmong3r 不,这是针对 C#、.NET 的。 PHP 有自己的工具/扩展/类来处理这个
  • @fishmong3r 如果您的意思是 input 是 php;你必须尝试一下,看看 HTML Agility Pack 用它做了什么
  • 是的,当然我的意思是输入是php。
  • 如果文件中没有 href,则 prog 会死掉。如何先检查它,如if(there is no node) return;
猜你喜欢
  • 2013-08-12
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
相关资源
最近更新 更多