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 :

Aide sur regex


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 198
    Par défaut Aide sur regex
    Bonjour,


    j'ai le contenu suivant dans un fichier:
    ip prefix-list REDISTRIBUTE_A seq 845 permit 10.5.48.0/24
    ip prefix-list REDISTRIBUTE_A seq 495 permit 10.6.140.0/24
    ip prefix-list REDISTRIBUTE_A seq 500 permit 10.6.141.0/24

    Je souhaite récupérer que les adresses réseaux sans les masque associé.

    J'ai fait le scripte suivant :

    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
    import re
     
    result = []
     
    pattern_ip = r"((\d+\.){3}\d+)"
    regex_pattern = re.compile(pattern_ip)
     
     
    with open('text.txt') as file:
        data = file.readlines()
        for l in data:
            IP = regex_pattern.findall(l)
            result.append(IP)
     
    for i in result:
        print(i)
    J'ai ce résultat
    [('10.5.48.0', '48.')]
    [('10.6.140.0', '140.')]
    [('10.6.141.0', '141.')]

    Je ne sais pourquoi il me répète le second octet.

    Je travaille sous windows et utilise la version 3.10

    Merci pour votre retour.

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 219
    Par défaut
    hello,
    tu peux essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pattern_ip = r"(?:\d{1,3}\.){3}\d{1,3}"
    ( ?: ) non-capturing group - the regex inside the parenthesis must be matched but does not create the capturing group

    Ami calmant, J.P

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Bonjour,

    j'ai appliqué une autre méthode de la librairie re de Python :

    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
    import re
     
    result = []
     
    pattern_ip = r"((\d+\.){3}\d+)"
    regex_pattern = re.compile(pattern_ip)
    data = [
        'ip prefix-list REDISTRIBUTE_A seq 845 permit 10.5.48.0/24\n',
        'ip prefix-list REDISTRIBUTE_A seq 495 permit 10.6.141.0/24\n',
        'ip prefix-list REDISTRIBUTE_A seq 500 permit 10.6.141.0/24\n'
    ]
     
    for l in data:
        IP = re.search(regex_pattern, l)
        result.append(IP.group())
     
    for i in result:
        print(i)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    10.5.48.0
    10.6.141.0
    10.6.141.0
    Est-ce que vous souhaitez ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 198
    Par défaut
    Merci pour vos retours.

    J'ai changé la variable pattern avec celle de Jurassik_pork et ca 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
    15
    16
    import re
     
    result = []
     
    pattern_ip = r"(?:\d{1,3}\.){3}\d{1,3}"
    regex_pattern = re.compile(pattern_ip)
     
     
    with open('text.txt') as file:
        data = file.readlines()
        for l in data:
            IP = regex_pattern.findall(l)
            result.append(IP)
     
    for i in result:
        print(i)

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 198
    Par défaut
    Citation Envoyé par Arioch Voir le message
    Bonjour,

    j'ai appliqué une autre méthode de la librairie re de Python :

    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
    import re
     
    result = []
     
    pattern_ip = r"((\d+\.){3}\d+)"
    regex_pattern = re.compile(pattern_ip)
    data = [
        'ip prefix-list REDISTRIBUTE_A seq 845 permit 10.5.48.0/24\n',
        'ip prefix-list REDISTRIBUTE_A seq 495 permit 10.6.141.0/24\n',
        'ip prefix-list REDISTRIBUTE_A seq 500 permit 10.6.141.0/24\n'
    ]
     
    for l in data:
        IP = re.search(regex_pattern, l)
        result.append(IP.group())
     
    for i in result:
        print(i)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    10.5.48.0
    10.6.141.0
    10.6.141.0
    Est-ce que vous souhaitez ?

    Le code donnée fonctionne avec une liste ou source mais dans le cas présent avec l'ouverture d'un fichier (<_io.TextIOWrapper name='text.txt' mode='r' encoding='cp1252'>)

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Citation Envoyé par caramon _majere Voir le message
    Le code donnée fonctionne avec une liste ou source mais dans le cas présent avec l'ouverture d'un fichier (<_io.TextIOWrapper name='text.txt' mode='r' encoding='cp1252'>)
    Normal, je n'avais pas de fichier sous la main, alors j'ai adapté le code. Ce n'était pas là que le pb était, aussi n'ai-je pas pensé qu'il fallait le préciser...

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    On peut aussi sans regex,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s = "ip prefix-list REDISTRIBUTE_A seq 845 permit 10.5.48.0/24"
    ip = s.split()[-1].split('/')[0]
    print(ip)  # 10.5.48.0

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

Discussions similaires

  1. [RegEx] Aide sur REGEX
    Par mouss4rs dans le forum Langage
    Réponses: 3
    Dernier message: 25/10/2018, 15h58
  2. [RegEx] aide sur regex de valeur defini
    Par comprateur dans le forum Langage
    Réponses: 7
    Dernier message: 22/04/2017, 10h56
  3. Aide sur regex
    Par mouss4rs dans le forum VBScript
    Réponses: 3
    Dernier message: 04/10/2016, 16h01
  4. re.search, aide sur regex
    Par Hydex dans le forum Général Python
    Réponses: 2
    Dernier message: 29/12/2009, 03h23
  5. Aide sur Regex
    Par Caponord38 dans le forum Langage
    Réponses: 2
    Dernier message: 29/02/2008, 20h49

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