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 :

Petit problème avec re [Python 3.X]


Sujet :

Python

  1. #1
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut Petit problème avec re
    Bonjour,
    J'ai un souci avec le module re :
    L'instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        contenu_read = fichier.read()
        result = re.findall(r"\\begin{tikzpicture}(.+?)\\end{tikzpicture}.tex", contenu_read)
    me retourne une liste vide alors que ce n'est pas normal.
    Avec startswith et endswith, j'ai des résultats mais ils ne sont pas concluants en raison de tabulations et d'espaces qui mettent le bazar.
    Une idée de la mauvaise manipulation que je fais ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 : 21 790
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Une idée de la mauvaise manipulation que je fais ?
    sans les données, difficile de savoir...
    note: ce n'est pas parce que vous pensez que le comportement constaté est anormal qu'il l'est.

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

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    Les données sont de ce type :
    \begin{corrigeNewpage}
    Simplifions le montage en remplaçant l'association $(R\parallel 3R)$ par un conducteur de résistance $R_\text{eq}=\frac34 R$.
    \begin{center}
    %\subimport{_images/}{fiche_ELC01_diviseur_tension1_rep_JRL_v1.tex}
    \begin{tikzpicture}[font=\footnotesize]
    \draw (0,-1)rectangle(2.5,1);
    % \draw (2,-1)--++(0,2);
    \pileL{}{$E$};
    \resistanceV{shift={(2.5,0)}}{$\frac34 R$};
    % \resistanceV{shift={(3,0)}}{$3R$};
    \resistanceH{shift={(1,1)}}{$R/4$};
    \draw[shift={(2.5,0)},->](10pt,-15pt)--++(0,30pt)node[midway,right]{$U_1$};
    \draw[shift={(1,1)},->](-15pt,-10pt)--++(30pt,0)node[midway,below]{$U_2$};
    \end{tikzpicture}
    Le souci, c'est qu'il y a des espaces ou/et tabulations avant les \begin{tikzpicture} par exemple.

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 606
    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 606
    Par défaut
    Vous pouvez dans un premier temps tester/affiner votre regexp sur le site regex101.

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 329
    Par défaut
    bonjour

    je suppose que tu désires simplement cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = re.findall(r'begin{tikzpicture}(.+?)\\end{tikzpicture}$', contenu_read, re.MULTILINE | re.DOTALL)

  6. #6
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    Oh Yess ! Merci beaucoup ! Je vais pouvoir avancer, maintenant.
    Bonne semaine à tous et toutes.

  7. #7
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    Bonsoir, est-il possible d'inclure les balises "\\begin{tikzpicture}" et "\\end{tikzpicture}" dans le résultat du findall ?
    J'ai l'impression d'avoir eu ce matin une requête correcte et lorsque je regarde ce soir, cela ne fonctionne pas.
    Au total, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        fichier = open(file,'r')
        contenu_read = fichier.read()
        print("contenu_read : ",contenu_read[:30])
        result = re.findall(r'begin{tikzpicture}(.+?)\\end{tikzpicture}$', contenu_read, re.MULTILINE | re.DOTALL)
        print("result : ", result)
        fichier.close()
    L'indentation est liée à une boucle sur une liste de fichiers.

  8. #8
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    J'ai testé le site proposé par Arioch avec la chaine suivante :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    \reponse{\np[V]{7}}
     
    \begin{corrige}
    \minusMedskip
    \minusBigskip
     
    	\begin{center}
    	%\subimport{_images/}{fiche_ELC01_loi_mailles1_q3_JRL_v2.tex}
    	\begin{tikzpicture}[
    	font=\footnotesize,
    	maille/.style={ultra thick,\redOrBlack,postaction={decorate},decoration={markings,mark=at position 25mm with {\arrow[\redOrBlack]{stealth};},mark=at position 55mm with {\arrow[\redOrBlack]{stealth};}}},
    	]
    	\draw (0,-1)rectangle(4.5,1);
    	\draw (4.5,1)--(3,0)--(4.5,-1);
    	\draw (3,0)-|(1,1);
    %	\pileL{}{};
    	\FEMVL{}{12\,V};
    	\FEMVR{shift={(4.5,0)}}{6\,V};
    %	\pileR{shift={(4.5,0)}}{6\,V};
    	\resistanceH{shift={(3.75,0.5)},rotate=33.7}{};
    	\resistanceH{shift={(3.75,-0.5)},rotate=-33.7}{};
    	\resistanceH{shift={(2,1)}}{};
    	\resistanceH{shift={(2,0)}}{};
    %	\draw[->,shift={(-.5,0)}](0,-.5)--++(0,1)node[midway,left=3pt]{\np[V]{12}};
    	\draw[->,shift={(3.75,.5)},rotate=33.7](-.5,6pt)--++(1,0)node[pos=.7,left=3pt]{$U_1$};
    	\draw[->,shift={(2,0.75)}](-0.5,0)--++(1,0)node[midway,below]{$U_2$};
    	\draw[->,shift={(2,-.25)}](0.5,0)--++(-1,0)node[midway,below]{$U_3$};
    	\draw[->,shift={(3.75,-.5)},rotate=-33.7](0.5,-6pt)--++(-1,0)node[pos=.3,left=3pt]{5\,V};
    	\draw[maille](0,-1)|-(1,1)|-(3,0)--(4.5,-1)--cycle;
    \end{tikzpicture}
    	\end{center}
     
    	Dans la maille surlignée et parcourue dans le sens indiqué, on trouve la relation $12-U_3-5=0$, ce qui donne $U_3=\np[V]{7}$. 
    \end{corrige}
     
    % ************************************** %
     
    % =============================================================================== %
    \finEntrainement
    % =============================================================================== %
    Cela ne fonctionne pas, apparemment

  9. #9
    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,

    peut-être avec le module TexSoup ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> from TexSoup import TexSoup
    >>> soup = TexSoup(data)
    >>> soup.find_all('tkizpicture')

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 269
    Par défaut
    hello,
    Citation Envoyé par marco056 Voir le message
    est-il possible d'inclure les balises "\\begin{tikzpicture}" et "\\end{tikzpicture}" dans le résultat du findall ?
    il suffit d'enlever les parenthèsesd dans (.*+?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = re.findall(r'begin{tikzpicture}.+?\\end{tikzpicture}$', contenu_read, re.MULTILINE | re.DOTALL)
    Ami calmant, J.P

  11. #11
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    Merci BufferBob mais non, j'ai l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AssertionError: Command \item invalid in math mode.
    Merci jurassik pork, mais toujours aucun résultat.

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 269
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Merci jurassik pork, mais toujours aucun résultat.
    C'est louche !
    avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import re   
     
    file = "d:/tmp/monFichier.txt"    
    fichier = open(file,'r')
    contenu_read = fichier.read()
    print("contenu_read : ",contenu_read[:30])
    result = re.findall(r'begin{tikzpicture}.+?\\end{tikzpicture}$', contenu_read, re.MULTILINE | re.DOTALL)
    print("result : ", result)
    fichier.close()
    et dans le fichier monFichier.txt le texte qui est dans le message #8 cela fonctionne chez moi.
    Python 3.10.6

  13. #13
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 329
    Par défaut
    même chose que jurassic pork , ligne 17 fonctionne chez moi (py 3.11)

    PS: Rien ne t'empêche d'insérer en début et fin les balises (ligne 14 dans mon test)

    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
     
    contenu_read = r'''     \begin{tikzpicture}[font=\footnotesize] un
    un
     \end{tikzpicture}
           ********* 
            \begin{tikzpicture}[font=\footnotesize] aa
        deux
     \end{tikzpicture}
    FIN'''
     
    result = re.findall(r'begin{tikzpicture}(.+?)\\end{tikzpicture}$', contenu_read, re.MULTILINE | re.DOTALL)
    print("re :", *result, sep="\n->")
    result = ["BEGIN"+m+"END" for m in result]
    print("re :", *result, sep="\n->")
    print("-"*5)
    result = re.findall(r'begin{tikzpicture}.+?\\end{tikzpicture}$', contenu_read, re.MULTILINE | re.DOTALL)
    print("re :", *result, sep="\n->")

  14. #14
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    Bonjour,
    Merci à vous : cela fonctionne maintenant, je ne comprends pas trop pourquoi le result était vide hier soir. Mystère (une faute de frappe ne me paraît pas trop possible car je faisais du copier-coller. J'affichais le début des fichiers, donc a priori, pas de souci de ce côté non plus).
    J'ai eu juste un bug, cette fois, résolu en enlevant le $ car il y avait des tabulations en fin de ligne.
    Je passe en résolu.

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

Discussions similaires

  1. Petits problèmes avec une CListCtrl
    Par vanitom dans le forum MFC
    Réponses: 2
    Dernier message: 17/11/2005, 12h45
  2. Un petit problème avec pop
    Par Paulinho dans le forum C++
    Réponses: 4
    Dernier message: 13/11/2005, 21h57
  3. Petit problème avec Line Input
    Par GrosQuicK dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/09/2005, 13h47
  4. (Petit ?) problème avec une page contenant du Flash
    Par ologram dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/09/2005, 19h45
  5. Petit problème avec SDL
    Par Nyarlathotep dans le forum C
    Réponses: 10
    Dernier message: 01/07/2005, 10h10

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