【问题标题】:C# List & Sort URLs by FileNameC# 按文件名列出和排序 URL
【发布时间】:2013-05-30 19:53:22
【问题描述】:

我想做这个:

anywhere.com/file/mybirthday.avi
anywhere.com/file/yourbirthday.avi
somewhere.com/file/mybirthday.avi
somewhere.com/file/yourbirthday.avi

到这里:

anywhere.com/file/mybirthday.avi
somewhere.com/file/mybirthday.avi
##############
anywhere.com/file/yourbirthday.avi
somewhere.com/file/yourbirthday.avi

我找到了带有正则表达式的文件名。我对它们进行了分类。所以我的代码在这里:

private void button1_Click(object sender, EventArgs e)
{
    string gelenler = textBox2.Text;
    gelenler = gelenler.Replace("\r\n\r\n", "\r\n");
    string cikti = string.Empty;
    string regex = @"([^\/\\]+\.\w+)$";
    string[] parca = Regex.Split(gelenler, "\r\n");
    string[] parca2 = new string[parca.Length];
    for (int i = 0; i < parca.Length; i++)
    {
        string ad = match(regex, parca[i]);
        parca2[i] = ad;
     }
     Array.Sort(parca2);

     for (int j = 0; j < parca2.Length; j++)
     {
         for (int i = 0; i < parca2.Length; i++)
         {
            if (parca2[i].IndexOf(match(regex,parca[j]))!=-1)
            {
               textBox1.Text += parca[i] + Environment.NewLine;
               parca[i] = "";
             }
             textBox1.Text += "#############" + Environment.NewLine;
          }

      }
}

private string match(string regex, string html, int i = 1)
{
     return new Regex(regex, RegexOptions.Multiline).Match(html).Groups[i].Value.Trim();
}

但是没有用。有什么想法吗?

//对不起我的英语

【问题讨论】:

  • 您希望何时/如何打印“##############”?
  • 文件名1.avi 文件名1.avi 文件名1.avi ############## 文件名2.avi 文件名2.avi 文件名2.avi
  • 你能检查一下我发布的代码 - 你打算根据文件名分组吗?

标签: c# regex sorting uri hyperlink


【解决方案1】:

我认为最好的办法始终是使用现有的 .net 框架,例如 Path.GetFileName:

        var strings = new[]
                      {
                          "anywhere.com/file/mybirthday.avi",
                          "anywhere.com/file/yourbirthday.avi",
                          "somewhere.com/file/mybirthday.avi",
                          "somewhere.com/file/yourbirthday.avi"
                      };

        strings = strings.OrderBy(x => Path.GetFileName(x)).ToArray();

        foreach (var s in strings)
        {
            Console.WriteLine(s);                
        }

        Console.ReadKey();

【讨论】:

    【解决方案2】:

    我认为您的意思是对文件进行分组;在这种情况下,可以使用以下代码:

            IEnumerable<IGrouping<string, string>> groups = strings.GroupBy(x => Path.GetFileName(x)).OrderBy(g => g.Key);
            foreach (var group in groups)
            {
                foreach (var str in group)
                {
                    Console.WriteLine(str);
                }
                Console.WriteLine("#############");
            }
    

    【讨论】:

    • 非常感谢。我确实合并了 Giedrius 和你的代码。它的工作。 //再次对不起我的英语:)
    【解决方案3】:

    您应该使用 Uri 类。使用 Segements 属性来获取文件名(它将是最后一个段)。

    var uris = new[]
    {
       new Uri("http://anywhere.com/file/mybirthday.avi"),
       new Uri("http://anywhere.com/file/yourbirthday.avi"),
       new Uri("http://somewhere.com/file/mybirthday.avi"),
       new Uri("http://somewhere.com/file/yourbirthday.avi")
    };
    
    var filename = uris.OrderBy(x => x.Segments[x.Segments.Length - 1]).ToArray();
    foreach (var f in filename)
    {
       Console.WriteLine(f);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      相关资源
      最近更新 更多