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] Problème simple, besoin de recul


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut [Regex] Problème simple, besoin de recul
    Bonjour à tous,

    Je veux vérifier que ma chaine de caractères respecte bien le format : 3 chiffres + une lettre maj + N chiffres.

    Et le pattern « ^\d{3}[A-Z]{1}\d{1,}$ » ne marche pas. En détails :
    - ^ début de chaine
    - \d{3} trois chiffres
    - [A-Z]{1} une lettre maj
    - \d{1,} N chiffres avec N >= 1
    - $ fin de chaine

    J’appelle la méthode IsMatch(). Et ça matche jamais (j’ai toujours false en retour) alors que si, en fait. Une idée ? :’(

    Le fait de bloquer sur un problème si simple me fait me dire que je dois rater quelque chose d'énorme. D'avance merci pour votre aide !

  2. #2
    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 peux à la rigueur simplifier avec
    mais ça ne doit pas changer le résultat. Par contre un peu de code histoire de voir comment tu appelles la regex pourrait être utile, avec un exemple de donnée d'entrée si possible

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut
    Bonjour, et merci de votre réponse !

    Voici l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    public void Load(string strFile)
    {
    	StreamReader objReader = null;
    	try
    	{
    		this.CSVLines = new ArrayList();
    		objReader = new StreamReader(strFile);
    		string strLine = objReader.ReadLine();
    		Regex regPlanNumber = new Regex(@"^\d{3}[A-Z]\d{1,}$]");
     
    		// Browse the lines of the file
    		do
    		{
    			// Check the line is valid
    			if (strLine.Trim() != "" && strLine.IndexOf(";") >= 0)
    			{
    				string[] astrFields = strLine.Split(';');
    				if (regPlanNumber.IsMatch(astrFields[0]))
    				{
    					CSVLine objLine = new CSVLine();
    					objLine.Description = astrFields[1];
    					objLine.PlanNumber = astrFields[0];
    					objLine.Type = astrFields[3];
    					objLine.Version = astrFields[2];
    					this.CSVLines.Add(objLine);
    				}
    			}
     
    			// Read next line
    			strLine = objReader.ReadLine();
    		} while (strLine != null);
    	}
    	finally
    	{
    		if (objReader != null)
    			objReader.Close();
    	}
    }
    Et voici les données (dans un fichier CSV) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    ;;;
    N° de plan;Désignation;Indice;
    350A61264301;POWER ASU WIRING;C;Base
    350A62004500;ANCILLARY PLUG WIRING;C;Base
    350A62004602;GENERATING SYSTEM DC WIRING;B;Base
    350A62401400;MASTER SWITCH RADIO WIRING;B;Base
    350A62410100;DIRECT BATT WIRING;G;Base
    350A63615903;RELEASE WIRING;B;Base
    350A64727202;POSITION LIGHT WIRING;D;Base
    350A64730701;LIGH INST PANEL&CONSOLE WIRING;D;Base
    350A64730801;ANTI-COLL LIGHT WIRING;A;Base
    350A64731000;RIGHT LIGHT LANDIND WIRING;D;Base
    350A64731100;DOME LIGHT WIRING;E;Base
    350A64731201;TAXI LIGHT WIRING;B;Base
    350A64733001;INDICATOR LIGHTING DIM TEST;F;Base
    350A64734600;LIGHT INDICATOR;D;Base
    350A67030101;ARRIEL 2B1 CTL WIRING;G;Base
    350A67030203;STARTING ARRIEL 2B1;A;Base
    350A67030307;VEMD WIRING;B;Base
    350A67030401;MGB WIRING;A;Base
    350A67030502;NR WARNING;D;Base
    350A67030602;FUEL WIRING;A;Base
    350A67030800;DUMPING VEMD WIRING;A;Base
    350A67030900;DATATION VEMD WIRING;B;Base
    350A67258301;BARRETTE CTL MOTEUR 66K;D;Base
    350A67416502;DOUBLE HYDRAULIC WIRING;A;Base
    350A67416900;REAR SERVO WIRING;A;Base
    350A67608500;FIRE DETECTION WIRING;C;Base
    350A67608702;HOUR METER WIRING;B;Base
    350A67608900;PIL WINGSHIEL WIPER WIRING;E;Base
    350A67609000;COPI WINGSHIEL WIPER WIRING;E;Base
    350A67609100;PITOT WIRING;D;Base
    350A67609301;HOLD DOORS INDICATING WIRING;A;Base
    350A67609400;CHIP DETECTOR WIRING;E;Base
     
    ;;;
    350A62004700;HIGH COLD STARTING;G;Opt. Pointé
    341A661166;BOUCHON EQUIPE;B;Opt. Pointé
    350A63501100;FX CLIM BLOC SMS;A;Opt. Pointé
     
    etc, etc ...

  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
    Tu as un caractère en trop qui traine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regex regPlanNumber = new Regex(@"^\d{3}[A-Z]\d{1,}$]");

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Effectivement, le ^ signifie début de chaine et le $ fin de chaine.
    Ca ne matchera jamais sur ton CSV car tes lignes sont plus complètes que ca, elles ne s'arretent pas au code 350A62004500
    Si tu enlèves le $ ca matchera une fois par ligne.

    Un outils sympa pour s'entrainer sur les Regex: http://www.ultrapico.com/Expresso.htm

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Tu as un caractère en trop qui traine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regex regPlanNumber = new Regex(@"^\d{3}[A-Z]\d{1,}$]");
    Voilà, c'était typiquement le genre d'erreur auquel je m'attendais. Une étourderie stupide et invisible quand on "bloque" la chose depuis une demi-heure. Un grand merci

    Citation Envoyé par Nathanael Marchand Voir le message
    Effectivement, le ^ signifie début de chaine et le $ fin de chaine.
    Ca ne matchera jamais sur ton CSV car tes lignes sont plus complètes que ca, elles ne s'arretent pas au code 350A62004500
    Si tu enlèves le $ ca matchera une fois par ligne.

    Un outils sympa pour s'entrainer sur les Regex: http://www.ultrapico.com/Expresso.htm
    Merci pour le lien. Cela marche maintenant correctement car si tu regardes le code en détail, j'utilise bien le Regex sur le premier champ des lignes du CSV.

    Merci pour votre aide
    Bonne fin de journée !

  7. #7
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par hobotalker Voir le message
    Merci pour le lien. Cela marche maintenant correctement car si tu regardes le code en détail, j'utilise bien le Regex sur le premier champ des lignes du CSV.
    J'ai lu trop vite

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

Discussions similaires

  1. [C#] Problème avec une regex (assez) simple
    Par Reminouche dans le forum Débuter
    Réponses: 5
    Dernier message: 17/09/2013, 17h38
  2. [RegEx] Problème de regex très simple
    Par i-mowgly dans le forum Langage
    Réponses: 14
    Dernier message: 11/12/2011, 18h04
  3. [RegEx] Problème simple pour comprendre comment marche les regex
    Par Fabious dans le forum Langage
    Réponses: 3
    Dernier message: 11/05/2011, 13h39
  4. Mon appli Access/Vba: besoin de recul
    Par kilimanjaro dans le forum Access
    Réponses: 4
    Dernier message: 02/11/2005, 11h06
  5. Problème simple d'apostrophe qui m'ennerve !
    Par beletteroi dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/09/2005, 21h58

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