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 :

Problème d'expression réguliére


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut Problème d'expression réguliére
    Bonjour, je souhaite via une expression régulière découper une chaîne suivant un schéma.

    Valeur = "DateCode("yy-W-N") + " " + DateCode("yyWN")"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim reg As New System.Text.RegularExpressions.Regex("^+(([a-zA-Z ])(\()+([\w\- \\.,;@#%${1,}\""]?)$(\)))|((\"")+(\w?)+([\""]))|(\d|\+\-\\*)")
     
     
    Dim Tmp() As String = reg.Split(valeur)
    je voudrais obtenir ceci

    Tmp(0) = "DateCode("yy-W-N")"
    Tmp(1) = "+"
    Tmp(2) = " "
    Tmp(3) = "+"
    Tmp(4) = "DateCode("yyWN")"

    Dans l'attente de vous lire, Cdlt

  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,
    dans ce contexte, pourquoi ne pas utiliser les groupes.
    Un groupe permet de créer des sous-expressions correspondant à chacune des chaines recherchées.
    Pour créer un groupe, il faut entourer la sous expression de parenthèses.
    Puis reste à les parcourir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Dim pat As String = "^(\w+\(""\w{2}-\w{1}-\w{1}""\))\s(\+)\s("" "")\s(\+)\s(\w+\(""\w{4}""\))$"
            ' Instantiate the regular expression object.
            Dim r As Regex = New Regex(pat, RegexOptions.IgnoreCase)
            ' Match the regular expression pattern against a text string.
            Dim m As Match = r.Match(Valeur)  'TextBox1.Text)
            For Each gr As Group In m.Groups
                Console.WriteLine(gr)
            Next
    Ou pour les parcourir plus finement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            For i As Integer = 1 To m.Groups.Count
                Console.WriteLine(m.Groups(i))
            Next
    m.groups(o) correspond au texte complet dans lequel on recherche.

    L'expression suivante correspond littéralement au texte proposé(dans l'attente de plusieurs exemples pour l'adapter).
    On y voit les 5 groupes à capturer :
    ^(\w+\(""\w{2}-\w{1}-\w{1}""\))\s(\+)\s("" "")\s(\+)\s(\w+\(""\w{4}""\))$

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    Bonsoir,
    dans ce contexte, pourquoi ne pas utiliser les groupes.
    Un groupe permet de créer des sous-expressions correspondant à chacune des chaines recherchées.
    Pour créer un groupe, il faut entourer la sous expression de parenthèses.
    Puis reste à les parcourir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Dim pat As String = "^(\w+\(""\w{2}-\w{1}-\w{1}""\))\s(\+)\s("" "")\s(\+)\s(\w+\(""\w{4}""\))$"
            ' Instantiate the regular expression object.
            Dim r As Regex = New Regex(pat, RegexOptions.IgnoreCase)
            ' Match the regular expression pattern against a text string.
            Dim m As Match = r.Match(Valeur)  'TextBox1.Text)
            For Each gr As Group In m.Groups
                Console.WriteLine(gr)
            Next
    Ou pour les parcourir plus finement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            For i As Integer = 1 To m.Groups.Count
                Console.WriteLine(m.Groups(i))
            Next
    m.groups(o) correspond au texte complet dans lequel on recherche.

    L'expression suivante correspond littéralement au texte proposé(dans l'attente de plusieurs exemples pour l'adapter).
    On y voit les 5 groupes à capturer :
    ^(\w+\(""\w{2}-\w{1}-\w{1}""\))\s(\+)\s("" "")\s(\+)\s(\w+\(""\w{4}""\))$
    Bonjour, ok j'ai fais un essai pour cette équation cela fonctionne. Maintenant pour ce qui est des autres combinaison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #Var_1 = DateCode()
    #Var_2 = DateCode("yywwd")
    #Var_3 = DateCode("yyWN")
    #Var_4 = Concat(DateCode("yy-W-N") DateCode("yyWN"))
    #Var_5 = DateCode("yy-W-N") + " "
    #Var_6 = DateCode("yy-W-N") & " "
    #Var_7 = MaFonction()
    #Var_8 = MaFonction(Param)
    Comme vous pouvez le voir le but est de découper cette chaîne en fonction des opérateurs (+ - * / &).

    en vous remerciant

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Bon, apres avoir pris le probléme à l'envers,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim pat As String = "(\+ |\- |/ |\* |& )"
    Dim reg As New Regex(pat)
    Dim Tmp() As String = reg.Split(valeur)
    Ce qui oblige toutefois à avoir des équations avec un espace derrière.

  5. #5
    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
    Bonjour,
    à tester cet extrait de modèle pour Split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim pat As String = "\s*(\+)\s*|\s*(&)\s*"
    Ce qui n'est pas entre parenthèses n'est pas capturer.
    Par exemple + ou & avec 0 ou plusieurs espaces devant ou derrière donnera "+" ou "&".

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    Bonjour,
    à tester cet extrait de modèle pour Split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim pat As String = "\s*(\+)\s*|\s*(&)\s*"
    Ce qui n'est pas entre parenthèses n'est pas capturer.
    Par exemple + ou & avec 0 ou plusieurs espaces devant ou derrière donnera "+" ou "&".
    Effectivement cela me semble plus robuste, en vous remerciant.

  7. #7
    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,
    si j'ai bien compris, il faut "spliter" aux espaces blancs tout en préservant ce qui se trouve entre guillemets.
    Alors un dernier truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Dim r As Regex = New Regex("""([^""]*)""|[^\s]+")
            Dim m As Match = r.Match(TextBox9.Text)
            Dim Tmp As New List(Of String)
     
            While m.Success
                Tmp.Add(m.Value)
                m = m.NextMatch
            End While
    Test, qui semble convenir, avec un TextBox9 ayant pour texte par exemple :
    Concat(DateCode("yy-W-N") DateCode("yyWN") & " " + MaFonction(Param) - " DateCode() "

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

Discussions similaires

  1. petit problème d'expression régulière
    Par stoyak dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2006, 11h20
  2. [regexp] petit problème d'expression régulière
    Par LE NEINDRE dans le forum Langage
    Réponses: 14
    Dernier message: 16/12/2005, 10h33
  3. Problème d'expression régulière
    Par SiM07 dans le forum Langage
    Réponses: 2
    Dernier message: 02/12/2005, 17h57
  4. Problème d'expression régulière
    Par Pymm dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 11/10/2005, 15h04
  5. Problème d'expression régulière
    Par Neitsa dans le forum Général Python
    Réponses: 3
    Dernier message: 11/08/2005, 14h29

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