0

私はこれを作りたい:

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

しかし、うまくいきませんでした。何か案は ?

//私の英語でごめんなさい

4

3 に答える 3

2

この場合のように、常に最良のアイデアは既存の.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();
于 2013-06-04T12:14:55.563 に答える
0

Uri クラスを使用する必要があります。ファイル名を取得するには、Segments プロパティを使用します (最後のセグメントになります)。

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);
}
于 2013-06-04T12:21:51.963 に答える
0

ファイルをグループ化することを意味していると思います。その場合、次のコードを使用できます。

        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("#############");
        }
于 2013-06-04T12:28:50.663 に答える