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 :

Combiner des regex par leur nom [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2017
    Messages : 23
    Points : 18
    Points
    18
    Par défaut Combiner des regex par leur nom
    Bonjour à tous,

    Je cherche à identifier des séquences de nombres écrits en toutes lettres ("vingt-huit", "mille cinq cent" etc) et j'ai trouvé pour cela une façon de le faire sur le web en définissant des regex pour les unités, les dizaines etc.
    Comme ça, on peut tout décrire en combinant les regex, mais justement c'est sur l'étape où on recombine les regex que ça plante : "unknown extension ?& at position 1" (la syntaxe ne correspond sans doute pas à du python) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    one_to_9 = r"^un|deux|trois|quatre|cinq|six|sept|huit|neuf$"
    ten_to_19 = r"^dix|onze|douze|treize|quatorze|quinze|seize|dix-sept|dix-huit|dix-neuf$"
    two_digit_prefix = r"^vingt|trente|quarante|cinquante|soixante|soixante-dix|quatre-vingt|quatre-vingt-dix|septante|octante|nonante$"
     
    regex_1_to_99 = (?&two_digit_prefix)(?:[- ](?&one_to_9))?|(?&ten_to_19)| (?&one_to_9)   # c'est là que ça bloque
    Sauriez-vous comment on peut réutiliser des regex au sein d'autres regex en les appelant par leur nom ?

    Un grand merci d'avance,

    Cordialement

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 17 343
    Points : 29 928
    Points
    29 928
    Par défaut
    Salut,

    Pour l'instant, vous ne faites que construire la chaine de caractères que vous vous proposez d'utiliser plus tard comme argument d'une fonction du module re.

    Et construire une chaine de caractères à partir de littéraux et de variables associées à d'autres chaines de caractères n'a aucune raison de devenir magique (c'est documenté et çà fonctionne comme çà dit....) en fonction de sa destination.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    mars 2009
    Messages
    2 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : mars 2009
    Messages : 2 257
    Points : 4 901
    Points
    4 901
    Par défaut
    Le module re permet de définir des groupes de capture et de faire référence à une partie de chaîne capturée précédemment, par contre il ne permet pas de faire référence à la sous pattern définie dans le groupe de capture.

    Cette fonctionnalité existe dans le module regex qu'il faudra alors installer:
    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 regex
     
    s = 'trente trois'
     
    pat = r'''(?x) # active le mode VERBOSE: les espaces sont ignorés, # démarre un commentaire inline
     
        (?(DEFINE) # ouvre un bloc de définition de sous-patterns nommées
            (?<two_digit_prefix> vingt|trente|quarante|cinquante|soixante|soixante-dix|
                                 quatre-vingt|quatre-vingt-dix|septante|octante|nonante )
            (?<one_to_9> un|deux|trois|quatre|cinq|six|sept|huit|neuf )
        )
     
        # la pattern principale
        (?&two_digit_prefix) [ ] (?&one_to_9)'''
     
    result = regex.findall(pat, s)
    PS: attention, on ne dit pas "vingt un" mais "vingt et un". Je te souhaite également bien du plaisir avec le "s" éventuel de quatre-vingts.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2017
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup wiztricks et CosmoKnacki
    , @ CosmoKnacki merci pour le code, je ne comprenais pas comment m'y prendre, et oui effectivement il y aura plein de cas particuliers à traiter ;-)

    Bonne journée à vous

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

Discussions similaires

  1. Extraction des colonnes par leurs noms
    Par hajarita65 dans le forum Programmation et administration système
    Réponses: 6
    Dernier message: 04/01/2018, 16h53
  2. chart : manipuler des series par leurs noms
    Par petitours dans le forum C#
    Réponses: 2
    Dernier message: 16/03/2012, 09h56
  3. Recherche des fichiers par leurs noms
    Par hackoofr dans le forum Vos Contributions VBScript
    Réponses: 0
    Dernier message: 26/05/2011, 13h08
  4. [XL-2002] Accéder à des boutons par leur nom
    Par miron dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 08/07/2009, 15h31
  5. Tuer des processus par leur nom
    Par tedparker dans le forum Access
    Réponses: 2
    Dernier message: 12/09/2006, 17h19

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