X-Received: by 2002:adf:d1ce:: with SMTP id b14mr29015547wrd.42.1635668135964; Sun, 31 Oct 2021 01:15:35 -0700 (PDT) Path: ...!news-out.google.com!nntp.google.com!proxad.net!feeder1-2.proxad.net!fdn.fr!news.ortolo.eu!news.izac.org!reader From: Benoit Izac Newsgroups: fr.comp.lang.regexp Subject: Re: Une regexp est recherchee Date: Sun, 31 Oct 2021 09:15:35 +0100 Message-ID: <87y269vcd4.fsf@izac.org> References: Reply-To: benoit.izac@free.fr Mime-Version: 1.0 Injection-Info: keg.izac.org; logging-data="3826850"; mail-complaints-to="usenet@izac.org" Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Bytes: 3410 Lines: 78 Bonjour, Le 31/10/2021 à 02:20, Stefan Ram a écrit dans le message  : > Une regexp est recherchée > > Étant donné le texte suivant : > >
  • xyzzywr$gALPHAaef a:iuea/li-aeif
  • >
  • abc cbwro/ghqiuBETAanfea+uieei!rqiu
  • >
  • 48 4/li_99e//og aiGAMMAa^ue uine fi.a iq
  • >
  • 285289äirh`iuahEPSILONafi uahuierih(aeui
  • > > La division en lignes dans cet affichage n'est faite que > pour des raisons de clarté. Ce que l'on veut dire, c'est > que le texte est une longue ligne unique. > > Vous voyez quatre sous-textes, dont chacun commence par > "
  • " et se termine par "
  • ". > > Ces textes partiels contenant "GAMMA" doivent maintenant > être supprimés à l'aide d'un programme capable de rechercher > des regexps et de les remplacer par d'autres textes. > > Le résultat devrait donc être le suivant : > >
  • xyzzywr$gALPHAaef a:iueafji-aeif
  • >
  • abc cbwro/ghqiuBETAanfea+uieei!rqiu
  • >
  • 285289äirh`iuahEPSILONafi uahuierih(aeui
  • > > . J'aimerais donc avoir une commande comme suit : > > Remplacer tous les sous-textes correspondant à le regexp > "..." par "" (rien). > > Mais que serait cette regexp ? > > La tentative naïve qui suit, échoue sûrement ! > > (écrit en Python) > > import re > > source = \ > "
  • xyzzywr$gALPHAaef a:iuea/li-aeif
  • "\ > "
  • abc cbwro/ghqiuBETAanfea+uieei!rqiu
  • "\ > "
  • 48 4/li_99e//og aiGAMMAa^ue uine fi.a iq
  • "\ > "
  • 285289äirh`iuahEPSILONafi uahuierih(aeui
  • " > > print( re.sub( "
  • .*?GAMMA.*?
  • ", "", source )) > > qui imprime > >
  • 285289äirh`iuahEPSILONafi uahuierih(aeui
  • > > . Je me demande si cela est possible ! Je n'ai pas trouvé pour le faire avec une regex sans un truc pourri mais on peut s'en sortir autrement : print(''.join( [s for s in re.findall('
  • .*?
  • ', source) if s.find('GAMMA') == -1])) La bonne méthode (qui marche dans toutes les situations) serait d'utiliser un parser HTML ou XML. Le truc pourri : print( re.sub( "
  • .(?:(?).)*GAMMA.*?
  • ", "", source )) Donc « 
  •  » suivi d'un caractère, suivi de zéro ou plus caractère(s) qui ne sont pas précédés de « 
  •  ». Évidemment ça va bouffer BETA si on a « 
  • GAMMA… ». -- Benoit Izac