Aide pour REGEX (débutant) - Divers - Programmation
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 :
|
ou
Code :
|
(la balise code a supprimé l'espace à la fin) ou
Code :
|
(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
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
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.
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.
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 |
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?
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:
|
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 :
Y a pas moyen de limiter le nombre d'espaces à partir du quel s'arrêter ?
Marsh Posté le 26-10-2024 à 19:57:10
Très étrange...
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...
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/
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.
Marsh Posté le 01-11-2024 à 15:30:09
rat de combat a écrit : Très étrange... |
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+,
Marsh Posté le 04-11-2024 à 14:56:59
Reply
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
Message édité par LordK le 24-10-2024 à 18:31:09