Je n'ai pas beaucoup d'expérience avec regexes et je voulais rectifier cela. J'ai décidé de construire une application qui prend un nom de répertoire, scanne tous les fichiers (que tous ont un numéro de série de plus en plus, mais diffèrent subtilement dans leurs noms de fichiers. Exemple: episode01.mp4
, episode_02.mp4
, episod03.mp4
, episode04.rmvb
etc.)trouver un nombre dans le nom de fichier en utilisant regex
L'application doit analyser le répertoire, trouver le numéro dans chaque nom de fichier et renommer le fichier avec l'extension à un format commun (episode01.mp4
, episode02.mp4
, episode03.mp4
, episode04.rmvb
etc.).
J'ai le code suivant:
Dictionary<string, string> renameDictionary = new Dictionary<string,string>();
DirectoryInfo dInfo = new DirectoryInfo(path);
string newFormat = "Episode{0}.{1}";
Regex regex = new Regex(@".*?(?<no>\d+).*?\.(?<ext>.*)"); //look for a number(before .) aext: *(d+)*.*
foreach (var file in dInfo.GetFiles())
{
string fileName = file.Name;
var match = regex.Match(fileName);
if (match != null)
{
GroupCollection gc = match.Groups;
//Console.WriteLine("Number : {0}, Extension : {2} found in {1}.", gc["no"], fileName,gc["ext"]);
renameDictionary[fileName] = string.Format(newFormat, gc["no"], gc["ext"]);
}
}
foreach (var renamePair in renameDictionary)
{
Console.WriteLine("{0} will be renamed to {1}.", renamePair.Key, renamePair.Value);
//stuff for renaming here
}
Un problème dans ce code est qu'il inclut également les fichiers qui ne sont pas des numéros dans le renameDictionary
. Il serait également utile si vous pourriez signaler d'autres pièges que je devrais faire attention.
PS: Je suppose que les noms de fichiers ne contiendront des numéros correspondant aux numéros de série (rien cam7_0001.jpg
)