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 sur plusieurs lignes [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Par défaut Regex sur plusieurs lignes
    Bonjour,

    Je cherche a ecrire une expression reguliere en VB.net sur une string de type:

    "1. du texte sur une ligne
    2 du texte sur
    deux lignes
    3. un autre texte"

    J'aimerais obtenir:
    match 1-> Number="1", Text= "du texte sur une ligne"
    match 2 -> Number="2", Text= "du texte sur /r/n deux lignes"
    match 3 -> Number="3", Text="un autre texte"


    Voici mon expression, avec option SingleLine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "((^)|(\n)|(\r))+\s*(?<Number>\d{1,3})[\.\s]+(?<Text>.*)"
    Il me manque donc une partie pour arreter le .* quand une nouvelle ligne avc un nombre apparait.
    Et apres pas mal de tentatives, c'est la dessus que je bloque...

    Si vous avez idees vous etes les bienvenus!

    Merci


    PS: desole pour les accents, c'est plus complique sur un clavier anglais

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Tu peux utiliser ce pattern:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(?<Num>[0-9]+)[.\s]+(?<text>.+?)\s*(?=\r?\n[0-9]+[.\s]|\z)
    avec les options Singleline et Multiline.

    L'idée est simple, on utilise un quantificateur lazy pour le texte .+? que l'on "attire" jusqu'au prochain item ou jusqu'à la fin de la chaîne \z avec un lookahead (test avant: (?=...)). Le test avant a l'avantage de ne pas faire partie du résultat, il va juste jeter un coup d'oeil après. En d'autre termes les sous-chaînes trouvées à l'intérieur du lookahead peuvent être utilisées pour les itérations suivantes du pattern.

    On en profite pour virer les caractères blancs qui traînent à la fin du texte en plaçant un petit \s* devant le lookahead. (si tu ne le souhaites pas tu peux le retirer sans problème.)

    Le mode multiline permet de changer le sens des ancres ^ et $ pour qu'elles désignent respectivement le début et la fin d'une ligne (au lieu de la chaîne par défaut), ce qui permet d'ancrer le numéro d'item en début de ligne. Par conséquent, pour désigner l'ancre de fin de chaîne, il faut utiliser \z à la place de $, car \z garde toujours la même signification quelque soit le mode.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Par défaut
    Merci!

    J'avais effectivement essaye d'utiliser un lookahead pour arreter la capture par contre je n'avais pas compris l'utilite du comportement lazy.

    Ca marche presque parfaitement, j'ai juste quelques sauts de lignes inattendus mais je devrais pouvoir regler ca sans trop de souci.

    Edit: le fait de devoir combiner MultiLine et SingleLine est assez contre-intuitif aussi (bien que cela ait du sens avec leurs definitions respectives)

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

Discussions similaires

  1. Regex Sur plusieurs lignes
    Par anis13015 dans le forum VB.NET
    Réponses: 2
    Dernier message: 27/07/2014, 19h52
  2. Response.Write sur plusieurs lignes
    Par simoryl dans le forum ASP
    Réponses: 2
    Dernier message: 31/08/2004, 22h49
  3. Réponses: 2
    Dernier message: 10/05/2004, 07h55
  4. TDBGrid - Un enregistrement sur plusieurs lignes
    Par BRODU dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/05/2004, 07h53
  5. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45

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