2016-06-20 3 views
2

私は現在、このような普及している、または効率的な再帰的検索および置換アルゴリズムはありますか?アーティストアーティストをフィーチャーしたタイトル偉業など</strong></p> <p>それとも</p> <p><strong>- - タイトルフィート

アーティストとしてのバリエーションの多様からの音楽ファイルの名前の変更を必要とするアプリケーションを開発していますフィーチャーアーティストなど

それとも

アーティスト - タイトル(feat。アーティストなど

をフィーチャリングアーティスト - タイトル(フィートフィーチャーアーティストなど)

私はあなたのアイデアを得ると思います。ファイル名に固定必要がある可能性があり、物事の多くがあることを

private void FindAndReplace() 
    { 
     try 
     { 
      var replaceList = new Dictionary<string, string> 
      { 
       {"[", "("}, 
       {"]", ")"}, 
       {"(Official Audio)", ""}, 
       {"(Audio)", ""}, 
       {"OFFICIAL", ""}, 
       {"Official", ""}, 
       {"(Video)", ""}, 
       {"Video)", ""}, 
       {"(video)", ""}, 
       {"video)", ""}, 
       {"(Lyric","" }, 
       { " Featuring ", " (ft. "}, 
       {",)", ")"}, 
       {" FEAT ", " (FEAT "}, 
       {" Feat ", " (FEAT "}, 
       {" Feat. ", " (FEAT "}, 
       {"(Feat.", "(ft."}, 
       {"(FEAT", "(feat"}, 
       {"(Music",""}, 
       {"(feat", "(ft"}, 
       {"FEAT ", "ft"}, 
       {"()", ""}, 
       {"()", ""}, 
       {"(|", ""}, 
       {"(|", ""}, 
       {"()", ""}, 
       {"FT ", "ft. "}, 
       {"Ft ", "ft. "}, 
       {"(Explicit)", ""}, 
       {"ft ", "ft. "}, 
       {" Ft. ", " (ft. "},//[ FT. , (ft. ] 
       {" FT. ", " (ft. "},//[ FT. , (ft. ] 
       {" FT", " (ft"},//[ FT, (ft] 
       {"(FT ", "(ft. "}, 
       {" (ft ", " (ft."}, 
       {" (Ft ", "(ft. "} 
      }; 

      while (true) 
      { 
       var reiterate = false; 
       foreach (var vari in replaceList) 
       { 
        if (FileName.ToLower().Contains(vari.Key.ToLower())) 
        { 
         reiterate = true; 
        } 
       } 
       if (reiterate) 
        foreach (var replaceItem in replaceList.Where(replaceItem => FileName.ToLower().Contains(replaceItem.Key.ToLower())) 
         ) 
        { 
         if (FileName.Contains(replaceItem.Key)) 
          FileName = FileName.Replace(replaceItem.Key, replaceItem.Value); 
         else 
          FileName = FileName.Replace(replaceItem.Key.ToLower(), replaceItem.Value); 

        } 
       if (reiterate) continue; 
       break; 
      } 
     } 
     catch (Exception ex) 
     { 

     } 
    } 

注:これを行うには

私の現在のハック方法。 私はこのメソッドでエラーに遭遇することがあり、それらはすべて置換辞書の順序に由来します。私の目標を達成するためのより効率的できれいな方法がありますか?

答えて

0

正規表現を使用してルールをマージできます。これにより

例えば

replaceAll("(?i)[\\s\\(]*fe?a?t\\.?[\\s]", " (ft. ") 

、あなたはすべてを置き換えることができます/「機能」の部分の周りにあなたのルールのほとんど。

関連する問題

 関連する問題