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

Python Discussion :

test regxp forum


Sujet :

Python

  1. #1
    Membre très actif
    Inscrit en
    Février 2008
    Messages
    475
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 475
    Par défaut test regxp forum
    Bonjour,
    j'ai les deux lignes suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    2012 Oct 24 14:27:20 (CloudStack) 192.169.1.1->/var/log/cloud/management/catalina.out WARN  [cloud.vm.UserVmManagerImpl] (StatsCollector-1:) Unable to obtain VM statistics
     
    2012 Oct 25 08:32:42 (CloudStack) 172.16.5.30->/var/log/cloud/management/catalina.out WARN  [cloud.vm.VirtualMachineManagerImpl] (consoleproxy-1:) Failed to stop vm VM[ConsoleProxy|v-2-VM] in Starting state as a part of cleanup process
    mon problème c'est que je peut récupérer la ligne 1 qui contienne la phrase
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Unable to obtain VM statistics
    voici la règle que j'ai cré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(?P<premsg>.*)\s(?P<sensor>\d+.\d+.\d+.\d+).*WARN\s(?P<postmsg>.*:\))\s(Unable to obtain VM statistics)
    aide
    merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par rezguiinfo Voir le message
    mon problème c'est que je peut récupérer la ligne 1 qui contienne la phrase ...
    Je suppose qu'il faut lire '...que je veux récupérer...'


    Ton pattern a l'air franchement étrange, je ne suis pas un expert en regex, peut-être que tu l'utilises dans un contexte qui m'échappe.

    Quoiqu'il en soit ceci fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    # -*- coding: utf-8 -*-
     
    import re
     
    chains = ["2012 Oct 24 14:27:20 (CloudStack) 192.169.1.1->/var/log/cloud/management/catalina.out WARN  [cloud.vm.UserVmManagerImpl] (StatsCollector-1:) Unable to obtain VM statistics",
    "2012 Oct 25 08:32:42 (CloudStack) 172.16.5.30->/var/log/cloud/management/catalina.out WARN  [cloud.vm.VirtualMachineManagerImpl] (consoleproxy-1:) Failed to stop vm VM[ConsoleProxy|v-2-VM] in Starting state as a part of cleanup process"]
     
     
    patt = re.compile('(?<=Unable to obtain VM statistics)')
     
    for idx, ch in enumerate(chains):
        if patt.search(ch) is not None:
            print "Line %s: %s" %(idx, ch)

  3. #3
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Je crois que le PO veux récupérer plusieurs éléments des lignes qui matchent, d’où l’utilisation des groupes nommés…

    Par contre, il faut faire attention aux espaces –*on ne peut presque jamais assumer un nombre précis d’espaces*! Et évidemment, ne pas oublier d’échapper le point quand on veut l’utiliser au sens littéral*!

    Je pense que ce motif devrait mieux fonctionner*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(?P<premsg>.*)\s+(?P<sensor>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*WARN\s+(?P<postmsg>.*:\))\s+(Unable to obtain VM statistics).*

  4. #4
    Membre très actif
    Inscrit en
    Février 2008
    Messages
    475
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 475
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Je crois que le PO veux récupérer plusieurs éléments des lignes qui matchent, d’où l’utilisation des groupes nommés…

    Par contre, il faut faire attention aux espaces –*on ne peut presque jamais assumer un nombre précis d’espaces*! Et évidemment, ne pas oublier d’échapper le point quand on veut l’utiliser au sens littéral*!

    Je pense que ce motif devrait mieux fonctionner*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(?P<premsg>.*)\s+(?P<sensor>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*WARN\s+(?P<postmsg>.*:\))\s+(Unable to obtain VM statistics).*
    merci pour votre réponse
    j'ai cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2012 Oct 25 08:32:42 (CloudStack) 172.16.5.30->/var/log/cloud/management/catalina.out WARN  [cloud.vm.VirtualMachineManagerImpl] (consoleproxy-1:) Failed to stop vm VM[ConsoleProxy|v-2-VM] in Starting state as a part of cleanup process
    voici ma règle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(?P<premsg>.*)\s+(?P<sensor>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*WARN\s+(?P<postmsg>.*:\))\s+(Failed to stop vm)
    j'ai ajouter à la fin .* mai je n'arrive pas d'afficher la ligne entier merci de m'aider de compléter la régle regxp
    merci d'avance

  5. #5
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Euuh… Si j’ai bien compris, vous voulez capturer l’ensemble du message (genre “Failed to stop vm VM[ConsoleProxy|v-2-VM] in Starting state as a part of cleanup process”), et pas seulement “Failed to stop vm”*? Dans ce cas, il suffit d’ajouter .* dans les parenthèses*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(?P<premsg>.*)\s+(?P<sensor>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*WARN\s+(?P<postmsg>.*:\))\s+(Failed to stop vm.*)

  6. #6
    Membre très actif
    Inscrit en
    Février 2008
    Messages
    475
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 475
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Euuh… Si j’ai bien compris, vous voulez capturer l’ensemble du message (genre “Failed to stop vm VM[ConsoleProxy|v-2-VM] in Starting state as a part of cleanup process”), et pas seulement “Failed to stop vm”*? Dans ce cas, il suffit d’ajouter .* dans les parenthèses*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(?P<premsg>.*)\s+(?P<sensor>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*WARN\s+(?P<postmsg>.*:\))\s+(Failed to stop vm.*)
    merci pour votre réponse mais seulement je veux (Failed to stop vm ) a
    parce que j'aime afficher la ligne qui ,contienne la phrase (Failed to stop vm)

    merci d'avance

  7. #7
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Je ne comprends pas ce que vous voulez exactement… Exprimez-vous plus clairement (donnez un exemple de ce que vous attendez), ou passez à l’anglais si le français vous est trop “étranger”*!

  8. #8
    Membre très actif
    Inscrit en
    Février 2008
    Messages
    475
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 475
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Je ne comprends pas ce que vous voulez exactement… Exprimez-vous plus clairement (donnez un exemple de ce que vous attendez), ou passez à l’anglais si le français vous est trop “étranger”*!
    ce que je veux dire c'est d'afficher la ligne qui contienne la phrase
    c'est àdire que je veux tester seulement sur et non pas surmerci d'avance

    j'ai remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (Failed to stop vm(.*))
    merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/04/2006, 11h19

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