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 avec mots atach�s [Python 2.X]


Sujet :

Python

  1. #1
    Membre confirm�
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activit� : Compositing / Pipeline
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par d�faut Regex avec mots atach�s
    Bonjour,

    J'ai fait un petit script qui va chercher les fichiers dans un dossier, puis les reclasses afin de pouvoir les �diter dans une applications tierces.
    Je suis confronter � un probl�me, me mettre � la place d'un utilisateur
    Je me suis dit qu'il fallait alors passer par du regex afin d'�largir les possibles erreurs de frappes.

    Exemple de fichiers dans un dossier ayant diff�rentes nomenclature:

    RndRawGlobalIllumination.0001.png
    RndGlobalIllumination.0001.png
    Rnd Global Illumination.0001.png
    RawGlobalIllumination.0001.png
    Raw_Global_Illum.0001.png
    RndGlobalIllum.0001.png
    GlobalIllumination.0001.png
    Global_Illumination.0001.png
    RawGI.0001.png
    GI.0001.png
    SelfIllumination.0001.png
    RndRawLighting.0001.png

    Pour les trier en :

    RndRawGlobalIllumination.0001.png
    RndGlobalIllumination.0001.png
    Rnd Global Illumination.0001.png
    RawGlobalIllumination.0001.png
    Raw_Global_Illum.0001.png
    RndGlobalIllum.0001.png
    GlobalIllumination.0001.png
    Global_Illumination.0001.png
    RawGI.0001.png
    GI.0001.png
    SelfIllumination.0001.png
    RndRawLighting.0001.png


    Se que j'aimerai r�cup�rer, se sont les fichiers ayant que pour nomenclature : "GlobalIllumination", "GI" et/ou "GlobalIllum"

    J'ai essay� de faire quelques chose :
    re.compile(r"[globalGLOBAL]{6}.?[illuminationILLUMINATION]{12}|[GIgi]{2}|[illumILLUM]{5}")

    Le probl�me, c'est qu'il me s�lectionne aussi d'autre fichiers qui comporte des "ig" "illum" mais surtout je n'arrive pas � la contraindre sur les pr�fixes ou suffixes.
    Je tourne en rond sur https://regexr.com/...

    Si quelqu�un passe par l�..


    merci

  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,

    Faire [globalGLOBAL]{6} revient � dire de autoriser 6 caract�res parmi globalGLOBAL, donc on peut se retrouver avec des GGGGGG, etc, pas n�cessairement global ou GLOBAL, pour cela, il faut utiliser des parenth�ses.

    Ton expression devrait en gros ressembler � �a.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    exp = '^((?:Rnd ?)?Global(?:_| )?Illum(?:ination)?|GI)\.\d{4}\.png$'

  3. #3
    Membre confirm�
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activit� : Compositing / Pipeline
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par d�faut
    fiou, ok...compl�tement � cot�.

    J'essaie de d�cortiquer tous �a, mais j'ai du mal � comprendre l'utilisation des parenth�ses et du "?:"

    En gros tu d�compose �a par groupe de mot (d�o� les parenth�ses), puis tu demande si �a correspond (avec "?:") et si �a ne correspond pas tu passe au mot suivant avec "|", c'est �a ?
    Si tu as le temps de m�expliquer, �a m'aiderai � comprendre.

    merci en tout cas.

  4. #4
    Membre confirm�
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activit� : Compositing / Pipeline
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par d�faut
    Je pense avoir capter le truc :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    '((?<![rR][aA][wW])([gG][lL][oO][bB][aA][lL])(?:_| )?([iI][lL][lL][uU][mM])(?:[iI][nN][aA][tT][iI][oO][nN])?|[gG][iI])'
    C'est long et relou, mais au moins si une lettre est mis en capital...on est bon.

    il ne me reste plus qu'� trouver pour :
    RawGI.0001.png
    GI.0001.png

    Afin de ne garder que GI

  5. #5
    Membre confirm�
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activit� : Compositing / Pipeline
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par d�faut
    Ha bh� voila, suffit de r�p�ter :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    '((?<![rR][aA][wW])([gG][lL][oO][bB][aA][lL])(?:_| )?([iI][lL][lL][uU][mM])(?:[iI][nN][aA][tT][iI][oO][nN])?|(?<![rR][aA][wW])[gG][iI])'
    Si tu repasse par l�, dit moi se que tu en pense ?!

    merci

  6. #6
    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
    Citation Envoy� par Miaz3 Voir le message
    fiou, ok...compl�tement � cot�.

    J'essaie de d�cortiquer tous �a, mais j'ai du mal � comprendre l'utilisation des parenth�ses et du "?:"

    En gros tu d�compose �a par groupe de mot (d�o� les parenth�ses), puis tu demande si �a correspond (avec "?:") et si �a ne correspond pas tu passe au mot suivant avec "|", c'est �a ?
    Si tu as le temps de m�expliquer, �a m'aiderai � comprendre.

    merci en tout cas.
    Non, par d�faut les parenth�ses d'une expression r�guli�re sont capturantes, or ici cela n'est nullement utile de capturer ces portions de texte comme Rnd, _, l'espace, etc.
    Les m�tas caract�res successifs ?: sp�cifie que l'on souhaite ne pas capturer ces �l�ments.
    C'est sp�cifi� dans la doc re de python

    L'expression � l'air complexe au 1er abord, mais en fait elle est tr�s simple.

    '^((?:Rnd ?)?Global(?:_| )?Illum(?:ination)?|GI)\.\d{4}\.png$'

    (?:Rnd ?)? signifie donc une parenth�se non capturante => (?: optionnelle => )? contenant Rnd suivi optionnellement d'un espace.

    (?:_| )? parenth�se non capturante optionnelle contenant soit un underscore OU soit un espace, le � ou � �tant donc le pipe |

    Illum(?:ination)? Illum suivi opyionnellement d'une parenth�se non capturante optionnelle contenant ination.

    ...|GI signifie donc la chaine contenant une chaine avec Global ou la chaine GI.

    Pour le reste je pense que tu dois conna�tre.

    Par ailleurs, si tu n'as pas besoin non plus de r�cup�rer uniquement le nom de l'image, tu peux �galement utiliser une parenth�se non capturante (ie : (??:Rnd... au lieu de ((?:Rnd... )

    Pour tes expressions, j'ai pas compris ce que tu souhaites faire, car normalement l'expression que je t'ai mis r�pondait au besoin de ton 1er message.

    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
    19
    20
    import re
     
    fichiers = """RndRawGlobalIllumination.0001.png
    RndGlobalIllumination.0001.png
    Rnd Global Illumination.0001.png
    RawGlobalIllumination.0001.png
    Raw_Global_Illum.0001.png
    RndGlobalIllum.0001.png
    GlobalIllumination.0001.png
    Global_Illumination.0001.png
    RawGI.0001.png
    GI.0001.png
    SelfIllumination.0001.png
    RndRawLighting.0001.png"""
     
    exp = '^(?:(?:Rnd ?)?Global(?:_| )?Illum(?:ination)?|GI)\.\d{4}\.png'
    for fichier in fichiers.splitlines() :
        m = re.match(exp, fichier)
        if m :
            print(m.group())

  7. #7
    Membre confirm�
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activit� : Compositing / Pipeline
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par d�faut
    Merci pour toutes ces explications !

    Avec ce que tu as propos� plus haut, j'ai fait le test sur https://regex101.com/ et �a ne m'affichait rien.
    Effectivement j'aurai du simplement essayer �a directement dans une console python...

    Concernant les lignes plus haut, j'essaie de pr�voir si les textes seront en majuscule ou non. d�o� les "...[gG][lL][oO][bB][aA][lL]..."
    Et puis concernant "(?<![rR][aA][wW])" j'ai vu sur la doc python que �a permettait d�esquiver se qu'il y avait avant.

    Je vois que j'ai m�lang� pas mal de choses...mais je ne comprend toujours pas pourquoi sur regex101.com �a ne fonctionne pas.
    Je trouvai �a pratique comme site.

  8. #8
    Membre confirm�
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activit� : Compositing / Pipeline
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par d�faut
    (?:Rnd ?)? signifie donc une parenth�se non capturante => (?: optionnelle => )? contenant Rnd suivi optionnellement d'un espace.
    Je pensais dans le cas ou je ne sais pas se qu'il peut y avoir avant "GlobalIllumination" ? mais qu'il capte toujours "GlobalIllumination"

    exemple :
    RndGlobalIllumination
    NoneGlobalIllumination
    NadaGlobalIllumination

    Ou alors s'il d�tecte "nada" il ne la retient pas.

  9. #9
    Membre confirm�
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activit� : Compositing / Pipeline
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par d�faut
    Apr�s moulte essaie, walou, il y a un truc que j'ai du mal � capter.

    Si par exemple je ne connais pas se qu'il y a avant "GlobalIllumination", je n'arrive pas � r�cup�rer le groupe.

  10. #10
    Membre confirm�
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activit� : Compositing / Pipeline
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par d�faut
    Finalement je vais partir dans cette direction. Vue qu'il ne faut pas les mots "Raw" et/ou total avant "GlobalIllumination" je vais les appeler en debut de regex.

    (?!([rR][aA][wW])

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Les regex avec des mots compos�s
    Par Halex78 dans le forum PHP & Base de donn�es
    R�ponses: 4
    Dernier message: 12/07/2008, 00h26
  2. Probl�me de Regex ... avec un point
    Par bugalood dans le forum Langage
    R�ponses: 2
    Dernier message: 29/05/2005, 10h26
  3. acceder a un fichier avec mot de passe
    Par moa378 dans le forum Windows
    R�ponses: 16
    Dernier message: 17/05/2005, 12h15
  4. [VB.NET] Fichier Excel vérouillé avec mot de passe
    Par rafano dans le forum ASP.NET
    R�ponses: 2
    Dernier message: 10/06/2004, 14h36
  5. [jakarta][regex]Matcher mot en entier.
    Par thibaut dans le forum Collection et Stream
    R�ponses: 6
    Dernier message: 26/05/2004, 13h33

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