Aide pour REGEX (débutant)

Aide pour REGEX (débutant) - Divers - Programmation

Marsh Posté le 24-10-2024 à 18:29:28    

Bonjour,
 
Je découvre les expressions régulières en travaillant sur un fichier calc que je souhaite apurer.
 
J'ai une colonne qui contient ces lignes :
 
M MANU
M M JULIEN
MME JEAN
MME M LAURE

 
Je souhaite utiliser des expressions régulières dans l'outil "Rechercher et remplacer" afin de virer la première itération de "M " et "MME " (avec leur espace) pour me retrouver avec ce résultat :
 
MANU
M JULIEN
JEAN
M LAURE

 
J'ai essayé les expressions suivantes :  
 
^M*E?\s  me supprime jusqu'au 2ème "M ", je me retrouve avec "JULIEN" au lieu de "M JULIEN"
^M*E? me supprime ce qu'il faut sauf l'espace, je me retrouve avec " M JULIEN" au lieu de "M JULIEN"
 
J'ai essayé d'autre pistes ( (^(M\s|MME\s){1} ou ^(M |MME ) par exemple) mais rien qui ne me sorte les résultats souhaités à savoir "M " et "MME " de début de ligne uniquement sans "M M " ni "MME M ".
 
Je viens donc vous demander un peu d'aide, merci :jap:


Message édité par LordK le 24-10-2024 à 18:31:09
Reply

Marsh Posté le 24-10-2024 à 18:29:28   

Reply

Marsh Posté le 24-10-2024 à 18:51:10    

Lu,

 
Citation :

^M*E?\s  me supprime jusqu'au 2ème "M ", je me retrouve avec "JULIEN" au lieu de "M JULIEN"


ça ne devrait pas sauf si le remplacement a été exécuté/eu lieu plusieurs fois ou qu'elle était suivie d'un quantificateur + ou *.

 

J'aurais écrit la même chose

Code :
  1. ^(?:M|MME)\s

ou

Code :
  1. ^(?:M|MME)

(la balise code a supprimé l'espace à la fin) ou

Code :
  1. ^(?:M(?:ME)?)\s

(qui ne sont que des variantes signifiant la même chose au détail près que \s ne se limite pas qu'à l'espace U+20)

 

PS : a priori, calc utile le moteur d'expression régulière d'ICU


Message édité par pluj le 24-10-2024 à 18:53:23
Reply

Marsh Posté le 24-10-2024 à 20:46:50    

Je te remercie j'essaierai ça de retour au bureau demain.
Ta réponse me rassure dans le sens où j'ai quand même compris un minimum le fonctionnement :jap:
Je vais essayer de persévérer, j'ai bien l'impression que les expressions régulières peuvent aider dans pas mal de situations.

Reply

Marsh Posté le 25-10-2024 à 15:10:56    

J'ai enfin pu essayer, malheureusement avec ces trois exemples j'arrive au même résultat :
MANU
JULIEN
JEAN
LAURE
 
Je me demande s'il est possible de compter nombre d'espaces pour s'arrêter au premier de la chaine ?
J'ai essayé comme ça : ^(?:M|MME)\s{1} mais je pense que ça limite à un espace d'affilée et non un seul espace dans la chaine de caractères.

Reply

Marsh Posté le 26-10-2024 à 18:55:16    

C'est bizarre ton histoire. Je connais pas les Regex de chez Calc, en Perl/PCRE ceci fonctionne très bien:

#! /usr/bin/perl
 
while(($_=<DATA> ))
{
 s/^M(?:ME)?\s//;
 print;
}
 
__DATA__
M MANU
M M JULIEN
MME JEAN
MME M LAURE


Au pire tu peux pas exporter ton ficher sous forme CSV p.ex. et utiliser quelque chose comme Geany (Linux) ou Programmer's Notepad ou du genre qui supporte les Regex PCRE et ensuite ré-importer dans Calc?


---------------
matos à vendre
Reply

Marsh Posté le 26-10-2024 à 19:50:53    

rat de combat a écrit :

C'est bizarre ton histoire. Je connais pas les Regex de chez Calc, en Perl/PCRE ceci fonctionne très bien:

#! /usr/bin/perl
 
while(($_=<DATA> ))
{
 s/^M(?:ME)?\s//;
 print;
}
 
__DATA__
M MANU
M M JULIEN
MME JEAN
MME M LAURE


Au pire tu peux pas exporter ton ficher sous forme CSV p.ex. et utiliser quelque chose comme Geany (Linux) ou Programmer's Notepad ou du genre qui supporte les Regex PCRE et ensuite ré-importer dans Calc?


 
Merci pour le retour, j'ai testé avec Notepad++ et j'obtiens le même résultat que sur Calc, à savoir que la sélection ne s'arrête pas au premier espace :
 
https://i.imgur.com/ZR9voUI.png
 
https://i.imgur.com/cJABhG6.png
 
Y a pas moyen de limiter le nombre d'espaces à partir du quel s'arrêter ?


Message édité par LordK le 26-10-2024 à 19:52:10
Reply

Marsh Posté le 26-10-2024 à 19:57:10    

Très étrange... :heink:  
 
Ca serait une histoire "greedy" vs "non greedy"? Ou alors c'est que aussi bien Calc que Notepad++ "exécutent" le Regex plusieurs fois de suite pour chaque ligne jusqu'à ce que plus rien ne change? Ca doit être ça, mais aucune idée comment régler ça...


---------------
matos à vendre
Reply

Marsh Posté le 27-10-2024 à 15:27:29    

Un très bon site pour tester les regex avec tous les langages et options imaginables et voir exactement comment chaque élément se comporte : https://regex101.com/


---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 27-10-2024 à 17:08:52    

Merci, effectivement ce site montre que l'expression est correcte et renvoie le résultat attendu.
Ce sont donc Calc et Notepad++ qui interprètent ça étrangement.
:jap:

Reply

Marsh Posté le 01-11-2024 à 15:30:09    

rat de combat a écrit :

Très étrange... :heink:  
 
Ca serait une histoire "greedy" vs "non greedy"? Ou alors c'est que aussi bien Calc que Notepad++ "exécutent" le Regex plusieurs fois de suite pour chaque ligne jusqu'à ce que plus rien ne change? Ca doit être ça, mais aucune idée comment régler ça...

Non, ce n'est pas ça :
La recherche/remplacement suivante débute juste après ce qui a été trouvé (et remplacé)  (en rouge ce qui matche, et en bleu ce qui remplace) mais comme tu limite le remplacement a ce qui doit être viré, ça se relance sur le reste de la ligne.
M M JULIEN -> ça trouve M M JULIEN -> ça remplace -> M JULIEN et ça relance la recherche après le texte remplacé, donc au début de M JULIEN et ça trouve a nouveau le M initial: M JULIEN -> ça remplace -> JULIEN et ça relance la recherche après le texte remplacé, donc au début de JULIEN et ça trouve plus rien a remplacer.
Il faut faire la recherche et le remplacement en bloc sur toute la ligne.
rechercher: ^(M(ME)?\s+)(.*)$
remplacer: \3
M M JULIEN -> ça trouve M M JULIEN -> ça remplace -> M JULIEN et ça relance la recherche après le texte remplacé, donc a la fin de la ligne et ça trouve plus rien a remplacer.
A+,


Message édité par gilou le 01-11-2024 à 15:41:45

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 01-11-2024 à 15:30:09   

Reply

Marsh Posté le 03-11-2024 à 17:09:11    

Merci ça fonctionne très bien :jap:

Reply

Marsh Posté le 04-11-2024 à 14:56:59    

Merci pour ces infos gilou! :jap:


---------------
matos à vendre
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed