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

Boost C++ Discussion :

[regex] flag /g


Sujet :

Boost C++

  1. #1
    Membre confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2003
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Sant�

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Par d�faut [regex] flag /g
    Bonjour � tous...

    � nouveau un petit probl�me sur un th�me que je ne ma�trise pas bien du tout : les regex... Alors voici mon probl�me...

    J'ai un tableau de std::string au format suivant, pour lesquelles je souhaite extraire chaque valeur num�rique :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4354	10885	3536	3536	22	0	620	0
    4354	10885	3536	3536	22	0	620	0	
    4354	10885	3536	3536	22	0	620	0
    Je me suis dit que c'�tait un travail de regex, mais j'en ch*e

    Voici mon code avec la regex que je tente de mettre au point :
    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
    17
    18
    19
    //string regex_str = R"((\S+)[\t\n]/g)";
    string regex_str = R"((\S+)[\t\n])";
    boost::regex reg(regex_str);
     
    for(auto &line : file_dataset)
    {
      // Extract data
      /* 'line' contient la ligne de texte présentée ci-dessus */
        boost::smatch results;
        //if(!boost::regex_match(line, results, reg))
        if(!boost::regex_match(line, results, reg, boost::match_any))
        {
          cerr << "* " << line << endl;
          continue;
        }
     
        // Data processing
          [...]
    }
    Pour chaque ligne de texte, la fonction ne me retourne aucun champ exploitable (on boucle avec continue). J'ai essayer plusieurs forme de formule regex, ainsi que quelques param�tres au niveau de l'appel regex_match mais en vain.

    Avant de me lancer dans l'exploitation de cette reger, je l'ai test� en ligne sur le site https://regex101.com. Avec l'option /g, cette regex est pleinement fonctionnelle.

    Avez vous des pistes de r�flexion sur cette utilisation ? Le testeur de regex est en mode PCRE, mais je ne sais pas si boost_regex est dans le m�me mode ni comment lui demander...


    de vos pr�cieux conseils !

  2. #2
    Membre confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2003
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Sant�

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Par d�faut
    Suite aux derni�re recherche, j'ai trouver une formulation de ce type :
    L� encore, j'ai bien un r�sultat avec le testeur, mais apr�s m�re r�flexion, il semblerait que ce soit un r�sultat par match et non un match comprenant plusieurs groupes captur�s...

    Comme si la piste serait une boucle dans la regex, mais google m�emm�ne partout lorsque je lui demande un "regex loop" ...

    C'est quand m�me pas �vident les regex au premier abord


    chaud chaud chaud

  3. #3
    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
    Je ne suis pas expert en C++, mais � mon avis tu te casses la t�te pour rien. Ton fichier n'est ni plus ni moins que du csv (des lignes avec le m�me nombre de champs s�par�s dans ton cas par une tabulation). Il serait plus simple de s�parer ces champs plut�t que de les chercher, autrement dit de spliter la ligne en utilisant la tabulation comme s�parateur.

    D'autre part boost::regex_match r�ussit uniquement si la pattern d�crit la cha�ne de bout en bout, ce qui n'est pas le cas ici. Pour trouver des sous-cha�nes, c'est plut�t boost::regex_search qu'il faut utiliser. Pour spliter avec une regex, tourne toi vers boost::regex_token_iterator, mais dans ton cas tu dois pouvoir te passer de regex.

  4. #4
    Membre Expert
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par d�faut
    C'est un travail pour strtol et co.

  5. #5
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Tu as un tableau de std::string sur lequel appliquer strtol/atoi sur chaque �l�ment ?
    Ou tu as un fichier sur lequel utiliser l'o�prateur>> du stream de lecture ?

    Dans tous les cas, t'aimes faire compliqu�, ce n'est pas du tout un travail de regexp.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  6. #6
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    et un while(std::getline(stream, string, '\d')), ou stream est un istringstream sur la ligne entiere?

  7. #7
    Membre confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2003
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Sant�

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Par d�faut
    PAN

    Mais carr�ment ! J'avais pas du tout pens� � �a, d'autant plus qu'il sagit d'une solution que j'utilise pour le traitement de mes trames de communication.

    Merci de l'id�e. En plus, �a va carr�ment plus vite sur mes gros fichiers de donn�es. C'est dommage, je commen�ais � aimer le regex ...

    Bon week...


+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [jakarta][regex]Matcher mot en entier.
    Par thibaut dans le forum Collection et Stream
    R�ponses: 6
    Dernier message: 26/05/2004, 13h33
  2. [Regex] V�rifier qu'une cha�ne respecte une expression r�guli�re
    Par PeteMitchell dans le forum Collection et Stream
    R�ponses: 7
    Dernier message: 13/05/2004, 14h22
  3. [regex][string] replaceAll bogu� ?
    Par 7eme dans le forum Collection et Stream
    R�ponses: 4
    Dernier message: 13/11/2003, 16h36
  4. Cherche regex...
    Par laurent_h dans le forum C
    R�ponses: 4
    Dernier message: 31/03/2003, 11h24
  5. Flags ??
    Par foussa dans le forum Assembleur
    R�ponses: 21
    Dernier message: 19/10/2002, 18h36

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