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 :

regex : regular expressions


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 24
    Par défaut regex : regular expressions
    Bonjour,

    Dans le but de filtrer un fichier texte j'ai essayé de comprendre la fonction regex mais malheureusement j'arrive pas à faire ce que je veux exactement, en fait mon texte contient des valeurs que je veux les récupérer mais il contient aussi d'autre symboles exemple ( " ' [ \\ ), des lettres, des espace et des retours à la ligne donc je veux récupérer que les valeurs mais je veux garder le point et la virgule.
    voici mon fichier
    f1.txt

    et mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import re
    regex = re.compile("^*([0-9][0-9,.]*)$")
    with open(r'C:\Users\admin\Desktop\projet M2\181127\regex\regex.txt', 'r+') as fs:
        with open(r'C:\Users\admin\Desktop\projet M2\181127\regex\regex2.txt', 'w') as f2:
            for line in fs:
                m=regex.search(line)
                if m:
                    f2.write(line)
    Merci d'avance

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import re
    >>> s = """['-10', '-4', " -5'", ' -2.5', '2,54']"""
    >>> regex = re.compile('-?\d+(?:(?:,|\.)\d+)?')
    >>> re.findall(regex, s)
    ['-10', '-4', '-5', '-2.5', '2,54']

    -? signifie le caractère - optionnel
    \d+ un chiffre une fois ou plus
    le (?: signifie que l'on ne souhaite pas capturer cette parenthèse

    (?:,|\.) ici, donc une parenthèse non capturante contenant (le pipe) soit la virgule soit le point (que l'on doit échapper, car c'est un méta-caractère).

    (?:(?:,|\.)\d+)? On en arrive à 2 parenthèses non-capturantes ou un ou plusieurs chiffres suivent un point ou une virgule, le tout étant optionnel (?).

    Mais, tu aurais sans doute pu faire cela depuis ta chaîne sans exp. rég. en construisant une liste et appliquant des str.split et str.strip.

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par bistouille Voir le message
    (?:(?:,|\.)\d+)?
    on peut même simplifier la deuxième parenthèse (?:[,.]\d+)?

  4. #4
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    En effet, c'est mieux

  5. #5
    Membre averti
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Novembre 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Novembre 2018
    Messages : 22
    Par défaut
    Re,

    Essaye ce site, c'est super bien expliqué avec un glossaire pour chaque fonction. https://regex101.com

    Tu sélectionne python, tu colles ton texte dans "test tring" et tu essaye les expressions.

    J'arrive avec cette expression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^\[' -?[0-9]*.[0-9]'.?,( .-?[0-9]*.?[0-9]'.?,)*

Discussions similaires

  1. Cobol Regex (REGular EXpression)
    Par rockley dans le forum Cobol
    Réponses: 11
    Dernier message: 29/01/2015, 15h40
  2. Regular Expression (Regex) syntax avec C#.NET
    Par paca_mike dans le forum C#
    Réponses: 4
    Dernier message: 24/03/2009, 21h54
  3. [debutant] Regular Expression
    Par absolut75 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 13/06/2006, 01h43
  4. [RegEx] Empty regular expression
    Par Khrysby dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 22h25
  5. [Regular Expressions] Numérotation romaine
    Par ramalho dans le forum Valider
    Réponses: 3
    Dernier message: 24/02/2004, 17h43

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