IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[regex][c#] Expression reguliere fausse


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut [regex][c#] Expression reguliere fausse
    Bonjour,

    J'ai une string assez longue dans laquelle je dois repérer un morceau de chaine du style

    datemodification="" ou datemodification="01/02/2007" (la date varie bien sur)

    Et remplacer cette chaine par un autre.

    voila comment je cherche ma chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Regex  dateModif   = new Regex(@"^dateModif[\w]{2}[0-9]{4}\-[0-9]{2}\-[0-9]{2}$");

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    si je me souvenais à quoi correspond \w ca aiderais

    dans tous les cas, ta recherche oblige la chaine à ressembler EXACTEMENT a ce pattern, toute la chaine du premier au dernier caractère.

    en plus, là tu vérifie juste que la chaîne correspond au pattern, mais si tu dois récupérer la date... c'est rapé, ya rien à catcher dans ton pattern.

    dateModif 0000-00-00
    c'est à peu près ce que tu veux vérifier ? je vois pas en quoi c'est long ca...

    tu devrais être plus précis sur ton besoin exact, le genre de string qu'on peut avoir à traiter, et ce que tu cherche exactement (l'expression complète) à "trouver" dans cette chaine d'exemple... car ton exemple est pas clair quand je vois ta regex.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    mon string c'est un fichier de 200Ko ou quelque part a l'interieur se trouve cette string: datemodif="" ou datemodif="01/02/2007"

    Mais il est possible de trouver d'autre date dans se fichier.

    Le truc c'est que je dois remplacer datemodif="xx/xx/xxxx" par la la date du jour : datemodif="datedujourauformatjj/mm/aaaa"

    Et la ca coince j'arrive pas a remplacer.

    \w Correspond à tout caractère littéral y compris le trait de soulignement. Équivalent à [A-Za-z0-9_].

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Si la chaine d'entrée est : datemodification="" ou datemodification="01/02/2007"

    Le pattern serait pour moi : datemodification="(?:\d{2}/\d{2}/\d{4})?"
    Pas de questions techniques par MP

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    chaine à trouver: datemodif="##/##/####"
    le pattern à remplacer ressemble surtout à cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Regex reg = new Regex("datemodif=\"(\\d{2}/\\d{2}/\\d{4})?\"", RegexOptions.IgnoreCase);
     
    reg.Replace(buffer, "datemodif=\"##/##/####\"");
    il te suffit de déterminer avant la chaine de remplacement.
    tu notera que là c'est du brut de fonderie, cependant... ca correspond au motif que tu veux attraper. tu n'aurais pas le caractère " à attraper ce serait plus simple mais bon...

    Ensuite tu dit que ton fichier est un flux XML... rien ne t'empeche de le lire avec les systèmes de gestion XML du framework, d'analyser les noeuds et de trouver tous les noeuds avec l'attribute datemodif et remplacer la valeur de ces attributes, puis "sauver" ce nouveau xml où tu veux quand la moulinette a fini... mais c'est sure que si c'est le seul traitement que tu apporte au fichier, ca ne vaut pas la peine de sortir l'artiellerie lourde.

    tiens en plus tu peux utiliser l'expression de StormimOn qu'est encore plus belle enfin oublie pas les \\d et n'oublie pas de pas mettre @ devant ta chaine sinon pour catcher " tu va te marrer

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    oui j'ai trop de mal a cause du ".

    En fait c'est bien du XML, mais je compare 2flux xml.
    mais ils ont des dates differentes d'ou l'interet de les virer de comparer et de reecrire.

    ma date est en fait du format ####-##-##

    Est ce qeu code est bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Regex reg = new Regex("dateModifSite=\"([0-9]{4}/-[0-9]{2}/-[0-9]{2})?\"", RegexOptions.IgnoreCase);
     
    			reg.Replace(buffer, "datemodif=\"##/##/####\"");

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    MA regex ne fonctionne pas il n'y a pas de remplacement.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Regex dateModifClientN = new Regex("DateModifClient=\"\"");
    				Regex dateVerifClientN = new Regex("DateVerifClient=\"\"", RegexOptions.IgnoreCase);
    				Regex dateModifSiteN = new Regex("DateModifSite=\"\"", RegexOptions.IgnoreCase);
    				Regex dateVerifSiteN = new Regex("DateVerifSite=\"\"", RegexOptions.IgnoreCase);
     
    				dateModifClientN.Replace(donneesXML, "DateModifClient=\""+ today.ToString("yyyy-MM-dd") + "\"");
    				dateVerifClientN.Replace(donneesXML, "DateVerifClient=\""+ today.ToString("yyyy-MM-dd") + "\"");
    				dateModifSiteN.Replace(donneesXML, "DateModifSite=\""+ today.ToString("yyyy-MM-dd") + "\"");
    				dateVerifSiteN.Replace(donneesXML, "DateVerifSite=\""+ today.ToString("yyyy-MM-dd") + "\"");
    Je n'arrive pas situer l'erreur....

  8. #8
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    L'idéal serait que tu ajoutes le contenu de ton fichier XML en pièce jointe sur le forum (l'icône en forme de trombone quand tu crées un message), ce sera plus facile pour t'aider. Alors édites ton post et ajoute les données d'entrée
    Pas de questions techniques par MP

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    DSL mais je ne peux pas mettre le XML

    En fait c'est cette regex la qui me pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Regex dateModifClient = new Regex("DateModifClient=\"([0-9]{4}/-[0-9]{2}/-[0-9]{2})?\"", RegexOptions.IgnoreCase);
    old = dateModifClient.Replace(old, "DateModifClient=\"\"");
    voila la ligne du XML
    <sectionClient Nom="gdfgdf" DateModifClient="2007-08-31" DateVerifClient="2007-08-31" Colonnes="2">
    ET j'arrive pas a remplacer les dates pour avoir ca :
    <sectionClient Nom="gdfgdf" DateModifClient="" DateVerifClient="" Colonnes="2">

  10. #10
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Tu as des / en trop dans le format de la date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Regex dateModifClient = new 
    Regex("DateModifClient=\"[0-9]{4}-[0-9]{2}-[0-9]{2}\"", RegexOptions.IgnoreCase);
    old = dateModifClient.Replace(old, "DateModifClient=\"\"");
    Pas de questions techniques par MP

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    C'est pas fait pour annuler l'effet du - ?

  12. #12
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Le caractère d'échappement c'est le \ pas le /

    Et dans ton cas tu n'as pas besoin d'annuler l'effet du -. Le - entre des [] permet d'indiquer une plage de valeurs, mais sinon c'est juste le caractère -
    Pas de questions techniques par MP

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Oki merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. débutant regex expression reguliere
    Par mhamedbj dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2007, 18h44
  2. Réponses: 6
    Dernier message: 14/11/2006, 15h17
  3. [REGEX] Pb d'expression reguliere
    Par atv_picco dans le forum Langage
    Réponses: 5
    Dernier message: 20/07/2006, 14h01
  4. [Regex]Expression régulière
    Par Guillaume Bénétrix dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 06/12/2005, 00h21
  5. [RegEx] Expression reguliere (regex)
    Par atovik dans le forum Langage
    Réponses: 2
    Dernier message: 24/11/2005, 15h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo