Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1139 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Aide pour REGEX (débutant)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide pour REGEX (débutant)

n°2482879
LordK
Posté le 24-10-2024 à 18:29:28  profilanswer
 

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
mood
Publicité
Posté le 24-10-2024 à 18:29:28  profilanswer
 

n°2482881
pluj
Posté le 24-10-2024 à 18:51:10  profilanswer
 

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
n°2482886
LordK
Posté le 24-10-2024 à 20:46:50  profilanswer
 

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.

n°2482962
LordK
Posté le 25-10-2024 à 15:10:56  profilanswer
 

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.

n°2483012
rat de com​bat
attention rongeur méchant!
Posté le 26-10-2024 à 18:55:16  profilanswer
 

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
n°2483013
LordK
Posté le 26-10-2024 à 19:50:53  profilanswer
 

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
n°2483014
rat de com​bat
attention rongeur méchant!
Posté le 26-10-2024 à 19:57:10  profilanswer
 

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
n°2483040
TotalRecal​l
Posté le 27-10-2024 à 15:27:29  profilanswer
 

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
n°2483042
LordK
Posté le 27-10-2024 à 17:08:52  profilanswer
 

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:

n°2483455
gilou
Modérateur
Modzilla
Posté le 01-11-2024 à 15:30:09  profilanswer
 

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é!  --
mood
Publicité
Posté le 01-11-2024 à 15:30:09  profilanswer
 

n°2483537
LordK
Posté le 03-11-2024 à 17:09:11  profilanswer
 

Merci ça fonctionne très bien :jap:

n°2483558
rat de com​bat
attention rongeur méchant!
Posté le 04-11-2024 à 14:56:59  profilanswer
 

Merci pour ces infos gilou! :jap:


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Aide pour REGEX (débutant)

 

Sujets relatifs
[PowerShell] Aide syntaxe PS et affichage de résultats byte/texteAide creation d'un batch pour modifier la carte reseau
besoin d aide pour un code cssaide script html
aide codes vba[Nginx] Problème URL rewritting via regex
aide installation JDK et ECLIPSE sous macbook M1[Regex] Domaine et FQDN
Aide pour une Regex 
Plus de sujets relatifs à : Aide pour REGEX (débutant)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR