我目前正在开发一个应用程序,需要从各种变体重命名音乐文件,例如
艺术家 - 以艺术家等为主题的专长
或者
艺术家 - 以艺术家等为特色的标题
或
艺术家 - 标题(专长。以艺术家等为特色
到
艺术家 - 标题(ft。特色艺术家等)
我想你明白了。
我目前的hacky方式:
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 :(得分:1)
您可以使用正则表达式合并规则。
e.g
replaceAll("(?i)[\\s\\(]*fe?a?t\\.?[\\s]", " (ft. ")
有了这个,您可以围绕'功能'部分替换所有/大部分规则。