8
votes

Comment trouver des fichiers selon REGEX en C #

J'ai besoin d'obtenir une liste de fichiers sur un lecteur avec des chemins correspondant à un motif spécifique, par exemple fa \ d \ d \ d.xml où \ D est chiffre (0,1,2..9). Les fichiers peuvent donc avoir des noms comme fa5423.xml.

Quel est le nom le plus efficace pour faire cela?


3 Réponses :


2
votes

Utilisez l'API de répertoire pour trouver fa ????. XML code> et exécutez la liste résultante via un filtre de regex:

var fa = from f in Directory.GetFiles("FA????.xml")
         where Regex.Match(f, "FA\d\d\d\d\.xml")
         select f;


1 commentaires

Ne pas regex.Match retourne un objet de match plutôt qu'un booléen?



6
votes

Vous pouvez faire quelque chose comme: xxx

puis à partir de vos résultats, il suffit de les isère et de les vérifier contre votre regex, c'est-à-dire que les caractères dans le nom sont Tous les numéros


0 commentaires

20
votes

Utilisez-vous C # 3?

Regex reg = new Regex(@"^FA[0-9]{4}\.xml$");
var files = Directory.GetFiles(yourPath, "*.xml").Where(path => reg.IsMatch(path));


3 commentaires

.Sélectionnez (chemin => chemin) est redondant.


Oki ... Et maintenant que je regarde à nouveau, je devrais ancrer la regex et il ne sert à rien d'obtenir *. * non plus.


@Phil mieux utiliser énuméraireFiles comme ce Stackoverflow.com/questions/3554559/... en raison de la performance que vous pourriez voir la différence dans ce Stackoverflow.com/questions/5669617/...