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

VB.NET Discussion :

RegEx avec motif récursif


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 81
    Points : 51
    Points
    51
    Par défaut RegEx avec motif récursif
    Bonjour à vous,


    J'utilise une RegEx pour récupérer des parties dans une chaine de caractères, des valeurs numériques.

    J'ai des suites de nombres, avec des séparateurs du type :

    Cas extrême :

    0.08(0.07Az)/ 0.005(0.004Az) -1.25 (0.556oO) / -1.06 (0.483oO) 22.05,89.051(0.060,0.642Pkl)/21.063,87.933(0.059,0.638Pkl)

    Cas Simple :

    0.08

    Sachant que je peux avoir n'importe quelle combinaison comprise entre ces deux cas.

    Je voudrais savoir s'il est possible de répéter une partie du motif tout enpermettant l'utilisation de .Groups() une fois le match effectué.

    J'utilise ceci comme motif :

    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
     
    'Définition du masque
    Dim pattern As String = ( *\-?\(?([\d\.]+)[a-zA-Z]*\,?\/?\(?\)?\-?){1,}
     
    'Définition de la MatchCollection pour la RegEx
    Dim retourPrincipal As MatchCollection
     
    'Utilisation de la RegEx sur la MatchCollection via le masque
    retourPrincipal = Regex.Matches(fichierComplet, pattern)
     
    'Pour le contrôle des valeurs dans les différents Match de .Groups
    For Each m As Match In retourPrincipal
                                    MsgBox(m.Groups(0).Value & vbNewLine & m.Groups(1).Value & vbNewLine & m.Groups(2).Value & _
                       vbNewLine & m.Groups(3).Value & vbNewLine & m.Groups(4).Value & vbNewLine & m.Groups(5).Value & _
                       vbNewLine & m.Groups(6).Value & vbNewLine & m.Groups(7).Value & vbNewLine & m.Groups(8).Value)
    next
    J'utilise des parenthèses pour récupérer tout de suite les valeurs numériques dans le pattern :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ([\d\.]+)
    'via
    m.Groups(0).Value 
    'me retourne sans traitement "0.638"
    Le soucis est que lorsque je demande le Groups(0).value il me retourne la dernière valeur numérique de la chaine, et les autres sont vide. Alors que je souhaite qu'il augmente lui même le nombre de groupement en fonction du type de ce que la RegEx trouve.

    Sinon je devrais mettre 16 fois se code bout à bout pour utiliser le .Groups

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim pattern As String = ( *\-?\(?([\d\.]+)[a-zA-Z]*\,?\/?\(?\)?\-?)( *\-?\(?([\d\.]+)[a-zA-Z]*\,?\/?\(?\)?\-?)?( *\-?\(?([\d\.]+)[a-zA-Z]*\,?\/?\(?\)?\-?)? '... Ainsi de suite 16 fois au total ...
    Je pense qu'il y a un meilleur moyen d'y parvenir, et je ne dois pas regarder dans le bon sens, c'est pour ça que je vous demande conseils, afin (si c'est réalisable) de faire un motif récursif qui ne récupère dans ses .Groups les valeurs numériques.


    Cordialement,
    Nicolas

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonsoir,
    moi, je lirais le fichier ligne par ligne.
    Je diviserais (Split) chaque ligne et appliquerais un motif très simple.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Dim line As String = "0.08(0.07Az)/ 0.005(0.004Az) -1.25 (0.556oO) / -1.06 (0.483oO) 22.05,89.051(0.060,0.642Pkl)/21.063,87.933(0.059,0.638Pkl)"
     
            Dim part() As String = line.Split("/"c)
            Dim pat As String = "[-*\d\.]+"
            For i = 0 To part.Count - 1
                Dim ret As MatchCollection = Regex.Matches(part(i), pat)
                For Each m As Match In ret
                    MsgBox(m.Value)
                Next
            Next

Discussions similaires

  1. Regex avec operateur non gourmand et repetition d'un motif
    Par singman dans le forum Windows Forms
    Réponses: 8
    Dernier message: 04/09/2009, 10h22
  2. [AJAX] PB avec motif récupéré et new RegExp() !
    Par kakou dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 22/08/2006, 10h36
  3. REGEX avec variable
    Par Mat_F dans le forum Langage
    Réponses: 3
    Dernier message: 21/07/2006, 19h24
  4. Problème de Regex ... avec un point
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2005, 10h26
  5. [Regex] Plusieurs motifs
    Par sissi_l dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 29/06/2004, 14h15

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