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: Trouver des noms de variables


Sujet :

VB.NET

  1. #1
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut Regex: Trouver des noms de variables


    Je ne suis pas trop calé en Regex... Ce que je cherche à faire, c'est de retrouver les variables dans une formule de calcul mais le formatage de la formule peut varier:
    • 0,7<=h1<=h2
    • 1<h1<1,05
    • Q>0,6
    • h2<0,9
    • etc...

    Pour le moment j'en suis à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Dim txt As String = "0,7<=h1<=h2"
            Dim regVar As New Regex("((?:[a-z][a-z0-9_]*))", RegexOptions.IgnoreCase Or RegexOptions.Singleline)
            Console.WriteLine(regVar.Match(txt).Value)
    Cela dit, ça me retourne que
    h1
    Après je ne sais pas si on peut faire quelque chose de générique comme il me faut, en tous cas je n'y arrive pas


    d'avance pour votre aide
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    J'ai trouvé ceci, si ça peut aider quelqu'un:
    https://msdn.microsoft.com/en-us/lib...x.matches.aspx
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    si tu as un format type pour tes variables genre démarre toujours par une lettre avec ensuite soit des lettres des chiffres ou des underscores ça peut être simple sinon ... ben ça le sera moins

    La prochaine fois je regarderais plus attentivement le code fourni en exemple qui fait exactement ce que je viens de dire

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Je reviens un peu à la charge, mon premier problème étant résolu, je ne vois pas par quel moyen (en prenant les différents exemples de formules dans mon premier post) je pourrais extraire que les valeurs numériques, en laissant de côté les variables et opérateurs. Si quelqu'un aurait la gentillesse de me prêter main forte, ce serait génial. Il faudrait que ce soit également générique, que ça puisse fonctionner dans n'importe quel cas avec n'importe quel nombre de valeurs.

    Aussi, si quelqu'un aurait un lien vers un tutoriel pour bien apprendre les Regex, il faudrait que je m'y mette sérieusement

    d'avance.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    J'ai en fait réussi... avec un peu de réflexion ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (([^a-zA-Z<>=][0-9,.]+)+)
    [EDIT]
    En fait ça marche pas dans ce cas de formuleCa ne me prends que "1.05"
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Attention cette regex risque de matcher des choses que tu ne souhaites pas par 0,,0 (après si ton entrée est sûre c'est pas gênant) [et celle que tu as mis en edit semble fonctionner ]

    Personnellement je te propose ceci pattern = "(?<!\w)(\d+(?:,\d+)?)" Attention, je me suis basé sur les exemples de ton post initial ; tu sembes avoir rajouté la prise en charge du point décimal (ou comme séparateur de milliers ?) ; ça n'y est pas là pour moi.

    Et concernant les tutos tu as http://lgmorand.developpez.com/dotnet/regex/ pour les "bases" et http://stormimon.developpez.com/dotn...ns-regulieres/ pour des choses plus avancées (voire même pas évidentes du tout )

  7. #7
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Je me permets un petit troll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	string formula = "0,7<=h1<=h2";
    	IEnumerable<string> variables = from v in formula
    						.Replace(" ", "")
    						.Split(new char[] { '>', '<', '=' }, StringSplitOptions.RemoveEmptyEntries)
    					where v[0] > '9' || v[0] < '0'
    					select v;

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Attention cette regex risque de matcher des choses que tu ne souhaites pas par 0,,0 (après si ton entrée est sûre c'est pas gênant) [et celle que tu as mis en edit semble fonctionner ]

    Personnellement je te propose ceci pattern = "(?<!\w)(\d+(?:,\d+)?)" Attention, je me suis basé sur les exemples de ton post initial ; tu sembes avoir rajouté la prise en charge du point décimal (ou comme séparateur de milliers ?) ; ça n'y est pas là pour moi.

    Et concernant les tutos tu as http://lgmorand.developpez.com/dotnet/regex/ pour les "bases" et http://stormimon.developpez.com/dotn...ns-regulieres/ pour des choses plus avancées (voire même pas évidentes du tout )
    J'arrangerais le reste comme il faut et merci pour les liens également
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

Discussions similaires

  1. Paramétrage des noms de variables
    Par AndréPe dans le forum Access
    Réponses: 2
    Dernier message: 07/10/2006, 15h54
  2. [Tableaux] Chaine contenant des noms de variables
    Par novices dans le forum Langage
    Réponses: 6
    Dernier message: 06/04/2006, 23h33
  3. [Stratégie] Générer des noms de variables
    Par Rekiem dans le forum Général Java
    Réponses: 31
    Dernier message: 09/01/2006, 10h23
  4. [Convention]Préfixage des noms de variables
    Par javaSudOuest dans le forum Langage
    Réponses: 5
    Dernier message: 18/11/2005, 15h52
  5. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45

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