【问题标题】:How can I parse a file name from string using IndexOf and Substring?如何使用 IndexOf 和 Substring 从字符串中解析文件名?
【发布时间】:2015-03-03 16:14:18
【问题描述】:
private void ParseFilesNames()
{
    using (WebClient client = new WebClient())
    {
        try
        {
            for (int i = 0; i < 15; i++)
            {
                string urltoparse = "mysite.com/gallery/albums/from_old_gallery/" + i;
                string s = client.DownloadString(urltoparse);
                int index = -1;
                while (true)
                {
                    string firstTag = "HREF=";
                    string secondtag = ">";
                    index = s.IndexOf(firstTag, 0);
                    int endIndex = s.IndexOf(secondtag, index);
                    if (index < 0)
                    {
                        break;
                    }
                    else
                    {
                        string filename = s.Substring(index + firstTag.Length, endIndex - index - firstTag.Length);
                    }
                }
            }
        }
        catch (Exception err)
        {
        }
    }
}

问题在于子字符串。索引 + firstTag.Length,endIndex - 索引 - firstTag.Length 这是错误的。

我需要得到的是HREF=""&gt;之间的字符串

整个字符串看起来像:HREF="myimage.jpg"&gt; 我只需要获取“myimage.jpg”

有时它可能是“myimage465454.jpg”,所以无论如何我只需要获取文件名。只有“myimage465454.jpg”。

我应该在子字符串中更改什么?

【问题讨论】:

  • 只使用 HtmlAgilityPack - 不要尝试自己解析 HTML,其他人已经为您完成了这项工作
  • 既然已经是“已解决”的问题,为什么还要手动解析 HTML?看看 HTML Agility Pack,无需像穴居人一样解析 HTML。

标签: c# .net string substring indexof


【解决方案1】:

如果您确定您的字符串将始终为 ,只需应用以下内容:

string yourInitialString = @"HREF="myimage.jpg"";
string parsedString = yourInitialString.Replace(@"<HREF="").Replace(@"">");

如果您需要解析 HTML 链接的 href 值,最好的选择是使用 HtmlAgilityPack 库。

使用 Html Agility Pack 的解决方案:

HtmlWeb htmlWeb = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc =  htmlWeb.Load(Url);

foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
    // Get the value of the HREF attribute
    string hrefValue = link.GetAttributeValue( "href", string.Empty );
}

要安装 HtmlAgilityPack,请在包管理器控制台中运行以下命令:

 PM> Install-Package HtmlAgilityPack

希望对你有帮助。

【讨论】:

    【解决方案2】:

    试试这个:

    String filename = input.split("=")[1].replace("\"","").replace(">","");
    

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 2020-09-13
      • 2013-05-21
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多