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

C# Discussion :

Regex Split texte [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Par défaut Regex Split texte
    Bonjour,

    je rencontre un problème lorsque j'essaye de parser un texte avec des caractères invisibles. Je n'arrive pas à trouver la bonne combinaison afin de récupérer mes éléments avec les caractères invisibles à la fin.

    Voici le texte en question :

    Le Lorem Ipsum !\r\rest simplement du faux texte employé !\rdans la composition ! \r et la mise en page avant impression. \r";
    Mon caractère séparateur est "!" suivi des caractères invisibles. Voici donc ce que j'aimerais récupérer :

    Le Lorem Ipsum !\r\r
    est simplement du faux texte employé !\r
    dans la composition ! \r
    et la mise en page avant impression. \r";
    Je dois absolument utiliser des regex. Malheureusement je ne suis pas parvenu au résultat attendu ni avec la fonction Matches() ni avec la fonction Split().

    Merci de votre aide.

    Cordialement.

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    sauf erreur, Split ne récupère pas le caractère ou la chaîne qu'on lui donne comme séparateur et encore moins, ce qui suit ce séparateur.
    Pour ma part, je chercherais à capturer les groupes qui correspondent à mon modèle.
    Ici : une chaine faite d'une suite de caractères (1 ou plus) et pouvant comprendre aussi des espaces et des caractères de ponctuation (0 ou plus) : (\w+\s*\p{P}*)+
    Suivi de 0 ou plusieurs point d’exclamation ou espace : !*\s*
    Et enfin au moins un retour à la ligne : \r+
    Un point d’arrêt sur le foreach pour visualiser la variable txtx semble donner le résultat escompté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            string txt = "Le Lorem Ipsum !\r\rest simplement du faux texte employé !\rdans la composition ! \r et la mise en page avant impression. \r";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                Regex myRegex = new Regex(@"(\w+\s*\p{P}*)+!*\s*\r+");
     
                MatchCollection matches = myRegex.Matches(txt);
     
                // Report the number of matches found.
                Console.WriteLine("{0} matches found in :\n   {1}", matches.Count, txt);
     
                // Report on each match.
                foreach (Match match in matches)
                {
                    string txtx = match.Value;
                    Console.WriteLine("*{0}*", match.Value);
                }
    A voir.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Par défaut
    Un grand merci pour ta réponse.

    J'ai essayé d'aller plus loin en suivant ta logique, malheureusement j'ai encore quelques difficultés à obtenir le résultat escompté.

    Tout d'abord voici le nouveau texte servant d'exemple :

    ---Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris euismod : tristiquetellus non egestas; Pellentesque fermentum lectus orci ! A dictum nunc placerat sed ? Quisque eget felis in lacus \rcursus posuere\r\r Aliquam venenatis\r nisi vitae dictum pharetra. ---Vivamus semper dolor quam, pellent.esque hendrerit sapien blandit ut. \r\r\r\rCras sem massa, tempor sit amet nunc id, condimentum facilisis augue... \rhttps://www.google.com dictum nunc placerat sed
    Dans ma version finale, le parsing est vraiment complexe... Je résume le tout :
    • 1) J'ai ajouté 4 autres séparateurs dans ce nouveau texte ":" ";" "!" "?" et "\r"
    • 2) Lorsqu'un séparateur est détecté, les caractères invisibles qui suivent doivent faire parti du match.
    • 3) Il est aussi possible de spliter avec "." seulement si il est suivit d'un caractère invisible.
    • 4) De plus, si on splite avec les deux-points ":" on doit vérifier qu'il ne s'agit pas d'une url pour ne pas le couper.


    Voici donc à quoi devrait ressembler le résultat final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ---Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
    Mauris euismod  : 
    tristiquetellus non egestas; 
    Pellentesque fermentum lectus orci ! 
    A dictum nunc placerat sed ? 
    Quisque eget felis in lacus \r
    cursus posuere\r\r 
    Aliquam venenatis\r
    nisi vitae dictum pharetra.     \r
    ---Vivamus semper dolor quam, pellent.esque hendrerit sapien blandit ut.  \r\r\r\r
    Cras sem massa, tempor sit amet nunc id, condimentum facilisis augue...  \r
    https://www.google.com dictum nunc placerat sed
    Et en reprenant ta regex, je bloque sur la première phase lorsque je tente de matcher sans prendre en compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regex r = new Regex(@"(\S*\w+\s*\p{P}*)+[;:!?]\s*");

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

Discussions similaires

  1. regex Split string
    Par langme dans le forum C#
    Réponses: 1
    Dernier message: 20/12/2013, 11h07
  2. affichage d'un regex avec .text() ou .append()
    Par Karl Marx dans le forum jQuery
    Réponses: 1
    Dernier message: 14/05/2010, 21h59
  3. [decouverte] regex split différents resultats selon le browser
    Par hornetbzz dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/03/2010, 10h02
  4. [XL-2003] Split texte et suppression
    Par brasco06 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/07/2009, 11h24
  5. [RegEx] split en fonction des espace en excluant les portion entre quotes
    Par Invité dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/06/2009, 16h58

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