Reconnaitre par une regex si ma chaine de caractère commence par 2 numéros [Résolu]

Signaler
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Bonjour, je souhaiterais faire une regex pour reconnaitre si ma chaine de caractère commence par 2 numéros suivi d'un "_" et si c'est le cas supprimer ce bout de chaine. J'écris donc :


string pattern = string.Format(@"(\d{2}_)(.*)");



Regex Myregex =
new
Regex(pattern,
RegexOptions.Singleline);


MyStr = Myregex.Replace(MyFileInfoName,
"$2");



J'obtiens le message d'erreur suivant :

Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

Qulqu'un peut-il me dire ou se trouve l'erreur ?

Merci d'avance.


Mathmax
A voir également:

6 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
90
Salut,
De là : string pattern string.Format(@"(\d{2}_)(.*)");> string pattern = @"(\d{2}_)(.*)";

/*
coq
MVP Visual C#
*/
Messages postés
60
Date d'inscription
mardi 26 juillet 2005
Statut
Membre
Dernière intervention
16 avril 2006

Selon ce que je vois .NET trouve que "|" est une erreur dans un fichier donc il envoie une erreur.

Une option serait donc de vérifier dans foreach() si chaque fichier est valide.

if (MyFile.Name.IndexOf(".gif") != -1 || MyFile.Name.IndexOf(".jpg") != -1){ //Fichier valide

}

C'est tout ce que je peux te donner
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
90
Si mes souvenirs sont bons le filtre ne peut spécifier qu'un seul format à la fois.
Sic'est le cas il te suffit de faire une requête de liste pour chaque extension et d'assembler les 2 sorties.

/*
coq
MVP Visual C#
*/
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

>mathmax

Les accolades sont interprétées dans string.Format comme le (n-1)ième élement dans la liste des arguments.

Poppyto http://www.poppyto.net LE site pour les bassistes
http://blogs.developpeur.org/Poppyto Mon Blog sur C#
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Ok merci ça marche. Juste une autre question, qui concerne toujours les regex. En fait le but de mon programme est de modifier des noms de fichiers, mais seulement les fichiers .jpg et .gif.

Je commence donc par faire la liste de mes fichiers à modifier :


DirectoryInfo MyFolder =
new
DirectoryInfo(
"C:\\Inetpub\\wwwroot1\\image\\OrkosNews");



FileInfo[] MyFileInfoList = MyFolder.GetFiles(
@"(.*.)(jpg|gif)");





puis j'applique l'algorithme précédent dans une boucle :





foreach (
FileInfo MyFileInfo
in MyFileInfoList){}

J'obtiens l'erreur suivnte sur ma regex @"(.*.)(jpg|gif)" (qui signifie tous les fichier avec extension .gif ou .jpg) :
Illegal characters in path.

Sais-tu pourquoi ?


Mathmax
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Ok merci pour vos réponses.


Mathmax