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 :

[Regexp] Suppression de caractères spéciaux en début de ligne


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 87
    Par défaut [Regexp] Suppression de caractères spéciaux en début de ligne
    Bonjour,

    Je récupère en expect sur un équipement réseau sa configuration.

    Voici un extrait du retour d'expect:
    ^@^@^M^@ // WIRELESS PROPERTIES CONFIGURATION //
    ^@^@^M^@
    ^@^@^M^@INTERFACE 1
    ^@^@^M^@
    ^@^@^M^@ Current Channel Bandwidth : 20 MHz
    ^@^@^M^@ Supported Channel Bandwidth : 5,10,20,40
    ^@^@^M^@ Auto Channel Selection : disable
    ^@^@^M^@ Current Configured Channel : 100
    Histoire que ce soit propre et lisible, j'aimerais supprimer le début des lignes.

    autant le ^M, pas de souci, autant le ^@ n'est pas reconnu. ni avec le caractère ^, ni @, ni "en couple" ^@. Je suis donc parti sur sur une suppression de tout ce qu'il y a avant le premier espace.

    j'ai un début de regexp qui me convient presque:
    ce qui me donne (le "!" est rajouté après):
    !// WIRELESS PROPERTIES CONFIGURATION //
    !1
    !Current Channel Bandwidth : 20 MHz
    !Supported Channel Bandwidth : 5,10,20,40
    !Auto Channel Selection : disable
    !Current Configured Channel : 100
    Le souci est que le mot INTERFACE a disparu. (quelques lignes comme ca n'ont pas d'espaces..)

    j'ai donc voulu remplacer le . par "tout ce qui n'est pas une lettre" et plus génériquement, un alphanumérique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $line =~ s/^\W+?\s+//g;
    Le retour est pire, je n'ai tout simplement plus la ligne!!
    !// WIRELESS PROPERTIES CONFIGURATION //
    !Current Channel Bandwidth : 20 MHz
    !Supported Channel Bandwidth : 5,10,20,40
    !Auto Channel Selection : disable
    !Current Configured Channel : 100
    Avez-vous une idée pour améliorer cette regexp?



    PS: j'ai le code suivant juste après ma ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # Ne conserver que les lignes non vides et commencant par certains
    # caracteres (le reste ne contenant normalement pas d'information
    # exploitable)
    next if ($line =~ /(^[^a-z,0-9,\-,\/]|^space|^\s*$)/i);
     
    push (@ret, "!$line");
    Merci d'avance,

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 352
    Par défaut
    Bonjour,
    Essaie cette regex:
    ou (equivalent):

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 87
    Par défaut
    Bonjour,

    ca fonctionne nickel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        $line =~ s/[^[:print:]]//g;
        $line =~ s/^\s+//g;
     
        # Ne conserver que les lignes non vides et commencant par certains
        # caracteres (le reste ne contenant normalement pas d'information
        # exploitable)
        next if ($line =~ /(^[^a-z,0-9,\-,\/]|^space|^\s*$)/i);
    J'ai toujours une ligne pour supprimer les espaces, mais c'est pas bien grave

    à quoi correspond par contre ce [:print:] ? je suis curieux de savoir

    Merci encore

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 352
    Par défaut
    C'est une classe de caractères en norme posix.
    Pour plus d'information, un man 7 regex qui explique le principe.
    et man 3 ctype pour connaitre la correspondance.

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

Discussions similaires

  1. Suppression de caractères spéciaux en bash
    Par judavid dans le forum Linux
    Réponses: 2
    Dernier message: 04/02/2009, 20h57
  2. [regexp] Suppression de caractères spéciaux
    Par Katachana dans le forum Langage
    Réponses: 3
    Dernier message: 17/07/2008, 10h30
  3. [RegEx] Suppression des caractères spéciaux et nombres
    Par kenny.kev dans le forum Langage
    Réponses: 6
    Dernier message: 03/03/2008, 16h53
  4. Suppression de caractères spéciaux
    Par khasanouray dans le forum Langage
    Réponses: 7
    Dernier message: 26/06/2007, 15h30
  5. Suppression de caractères spéciaux
    Par nellynew dans le forum Access
    Réponses: 3
    Dernier message: 18/09/2006, 10h14

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