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

VBScript Discussion :

Récupération de valeur avec regex


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut Récupération de valeur avec regex
    Bonjour,

    J'ai besoin de vous pour construire un regex.
    J'analyse ligne par ligne, un fichier texte.
    La structure est la suivante : la chaine commence par l'une des séquence suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "  ' #xxxx yyyy '  " 
    ou " // #xxxx yyyy "
    ou " /* #xxxx yyyy */ "
    xxxx est un mot obligatoire de taille variable dont la valeur peut être soit "aaaa" ou "bb" ou "ddddddd"
    yyyy est un mot optionnel de taille variable
    pour les espaces, il peut y en avoir entre 0 et plusieurs (sauf pour séparer xxxx et yyyy, il faut obligatoirement au moins un espace)

    Je veux pouvoir récupérer facilement les valeurs de xxxx et yyyy. Si pas de yyyy alors la valeur récupérée doit être ""


    Voici mon regex actuel mais il ne fonctionne pas totalement (pour la gestion de "//" qui n'a pas de balise fermante) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regex_str = "^\s*((')|(/*)|(//))\s*#((aaaa)|(bb)|(ddddddd))(\s+(\w+))*\s*((')|(*/)).*"
    Comment puis-je construire mon regex ?

    Aussi comment faire pour dans ma commande pour que xxxx et yyyy se retrouve à l'index 0 et 1 dans results ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set results = re1.Execute(linesArray(lineIndex))

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    Il serait plus facile pour t'aider si tu nous mets une petite dizaine de lignes de ton fichier que tu veux traiter, on pourrait expérimenter de notre côté.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut
    Bonjour,

    Voici quelques exemples de lignes qui doivent matcher :
    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
      ' #aaaa val1 '   
      ' #aaaa val1 '   // blablabla
      // #bb val2   
      // #bb val2    /* blablabla */
     /*#bb val2*/  // #aaaa
      /* #ddddddd  */  'aaaa'
      // #aaaa //  'blablabla'
     
    Doit renvoyer :
    results(0) = "aaaa" et  results(1) = "val1"
    results(0) = "aaaa" et  results(1) = "val1"
    results(0) = "bb" et  results(1) = "val2"
    results(0) = "bb" et  results(1) = "val2"
    results(0) = "bb" et  results(1) = "val2"
    results(0) = "ddddddd " et  results(1) = ""
    results(0) = "aaaa" et  results(1) = ""
    => je dois pouvoir récupérer les valeur xxxx et yyyy. Pas besoin de récupérer la chaine "blablabla", elle dois juste être ignorée (et pas d'erreur si non présente)


    Voici quelques exemples de lignes qui ne doivent pas matcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      // aaaa val1    
      'aaaa val1 '   // blablabla
      /*#bb val2    // 
      /*#bb val2' 
      '#zzzzz'
      '#ddddddd  */
      'aaaa val1'  '#aaaa val1'

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    L'exemple que tu nous donnes n'est sûrement pas la réalité du fichier que tu dois traité, pour ma part, je ne te soumettrais pas un Pattern dans ses conditions, il ne sera probablement pas opérationnel.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Bon, histoire de ne pas perdre le code
    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
    42
    43
    44
    45
    46
    Dim Memo
    Call(Trier)
    MsgBox "Resultat" & vbnewline & vbnewline & Memo
     
    Sub Trier
    Dim RegularExpressioN, ResulT, Match
            Dim MeStr, MsG, T, U
     
            'simulation du fichier tel que décrit
            MeStr =  "' #aaaa val1 '" & vbnewline _
      & "' #aaaa val1 '   // blablabla" & vbnewline _
      & "// #bb val2" & vbnewline _
      & "// #bb val2    /* blablabla */" & vbnewline _
      & "/*#bb val2*/  // #aaaa" & vbnewline _
      & "/* #ddddddd  */  'aaaa'" & vbnewline _
      & "// #aaaa //  'blablabla'"
     
    	Set RegularExpressioN = New RegExp
    	'RegularExpressioN.IgnoreCase = True 'accepte caract. min/MAJ
    	RegularExpressioN.Pattern = "#([a-z ]*) ([a-z0-9]*)"
    	RegularExpressioN.Global = True's'applique à la chaîne entière
    	If RegularExpressioN.Test(MeStr) = True Then 'non obligatoire (précaution), méthode Test
    	    Set ResulT = RegularExpressioN.Execute(MeStr)
            For U = 0 To ResulT.Count - 1
    			Set Match = ResulT(U)
    			If Match.SubMatches.Count > 0 Then
    				For T = 0 To Match.SubMatches.Count - 1
    					If Trim(Match.SubMatches(T)) <> " " Then
    						MsG = MsG & "Result(" &  T & ") = """ & Match.SubMatches(T) & """"
    						If T <> Match.SubMatches.Count - 1 Then
    							MsG = MsG & "  et  "
    						End If
    					End If
    				Next
    				MsG = MsG & vbNewLine
                End If
                Set Match = Nothing
            Next
            MsG = Left(MsG, (len(MsG)- len(vbNewLine))) 'pour supprimer le dernier vbNewLine
            Else
    		MsG = "Pas d'occurence"
    	End If
    	Set RegularExpressioN = Nothing
    	Memo = MsG
     
    End Sub
    se qui donne
    Nom : PatternAutre.JPG
    Affichages : 104
    Taille : 122,1 Ko
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut
    Merci,
    Au final, je pense que je vais simplifier les conditions de test : je voulais gérer pleins de cas différents mais je pense qu'il est beaucoup plus simple de limiter le format des fichiers texte.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/03/2016, 13h07
  2. [RegEx] Besoin d'aide pour construire une regex complexe
    Par Predax dans le forum Langage
    Réponses: 2
    Dernier message: 06/03/2013, 08h52
  3. [RegEx] Besoin d'aide pour une regex (html)
    Par benjamin122 dans le forum Langage
    Réponses: 10
    Dernier message: 07/09/2012, 23h33
  4. Besoin d'aide pour un regex
    Par chris81 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/09/2008, 14h02
  5. [RegEx] Besoin d'aide pour une regex
    Par vallica dans le forum Langage
    Réponses: 3
    Dernier message: 20/09/2006, 08h50

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