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

Langage Perl Discussion :

[langage] [expression reguliere]


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Par défaut [langage] [expression reguliere]
    J'ai un fichier que je voudrais traiter avec une expression reguliere (pour supprimer un certain nombre d'informations). Comme un exemple vaut mieux qu'un long discours , voici donc un extrait du fichier :
    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
     
    kqfkbqsdfbsj
     
    avant premier chat
    chat
    zzz>
     
    chien
    apres premier chien
     
    avant second chat
    chat
    yyyy
    vvvvv
    chien
    apres second chien
     
    XXXXXXX
    En fait je voudrais supprimer toutes les chaines commençant par chat et finissant par chien. Avec l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $resultat=~ s!chat(.|\s)*chien!!ig;
    (où $resultat est une variable chaine de caractere qui représente le contenu du fichier)
    J'obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    kqfkbqsdfbsj
     
    avant premier chat
    apres second chien
     
    XXXXXXX
    ALors que je voudrais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    kqfkbqsdfbsj
     
    avant premier chat
    apres premier chien
     
    avant second chat
    apres second chien
     
    XXXXXXX

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Par défaut
    Juste un petit rectificatif, lorsque j'écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "avant premier/second chat"
    ou
    "apres premier/second chien"
    il faut lire plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "avant premier/second chaine cherchée 1"
    ou
    "avant premier/second chaine cherchée 2"
    Car sinon évidement le résultat n'est pas bon ...

  3. #3
    Jeh
    Jeh est déconnecté
    Membre expérimenté Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Par défaut
    bah tes chaines ne sont pas sur la même ligne, donc déjà, ça ne peut pas marcher avec la substitution.
    Et ça s'utilise aussi avec des "!" ?
    Ce qu'il faudrait faire, d'après moi, c'est lire chaque ligne de ton fichier (ce que tu dois déjà faire) une fois que tu trouves 'chat', tu stockes tout ce qu'il y a à la suite jusqu'à 'chien'. Si tu trouves 'chat' avant chien, tu remets ta variable de stockage à vide. Y'a moyen de faire cela avec deux boucles while imbriquées.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 22
    Par défaut Re: [expression reguliere]
    Citation Envoyé par Patrick
    (où $resultat est une variable chaine de caractere qui représente le contenu du fichier)
    Citation Envoyé par Jeh
    bah tes chaines ne sont pas sur la même ligne
    ????

  5. #5
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    Je crois que j'ai ce qu'il te faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fichier =~ s/(\n?)^chat(.*?)chien$//igsm;

    Ca te convient ?


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  6. #6
    Jeh
    Jeh est déconnecté
    Membre expérimenté Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Par défaut Re: [expression reguliere]
    Citation Envoyé par Fanch.g
    Citation Envoyé par Patrick
    (où $resultat est une variable chaine de caractere qui représente le contenu du fichier)
    Citation Envoyé par Jeh
    bah tes chaines ne sont pas sur la même ligne
    ????
    Je retire...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Par défaut
    Merci ce n'était pas exactement cela, mais l'idée du "?" était bonne, voilà comment je m'en suis sorti :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $fichier=~ s!(\s*)!!ig;
    $fichier=~ s!<chat(.*?)chien!!ig;
    Il faut noter qu'ici j'ai perdu les caractères de type "\s" mais ils ne m'étaient pas utiles

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Par défaut
    Syntaxe exacte (pas de "<") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $fichier=~ s!(\s*)!!ig; 
    $fichier=~ s!chat(.*?)chien!!ig;

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/12/2003, 15h23
  2. [langage] [expression reguliere] : syntaxe
    Par arcane dans le forum Langage
    Réponses: 8
    Dernier message: 25/09/2003, 13h03
  3. [langage] [Expression][Régulière] motif
    Par Cyspak dans le forum Langage
    Réponses: 4
    Dernier message: 23/09/2003, 14h24
  4. Réponses: 2
    Dernier message: 16/06/2003, 15h15
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14

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