Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

regexp

8 réponses
Avatar
Guillaume Connan
Bonjour,
j'ai beau mettre des //(, $ partout, je n'arrive pas à remplacer des
occurences du type :

(0.253 0.754 0.778)

par

(0.253,0.754,0.778)

C'est pour des codes de couleur : il y en a 256...

Merci
--
Guillaume Connan

http://gconnan.free.fr

8 réponses

Avatar
Benoit Izac
Bonjour,

le 01/12/2007 à 15:47, Guillaume Connan a écrit dans le message
:

j'ai beau mettre des //(, $ partout, je n'arrive pas à remplacer des
occurences du type :

(0.253 0.754 0.778)

par

(0.253,0.754,0.778)

C'est pour des codes de couleur : il y en a 256...



Essaye « M-x regexp-builder »

"(([0-9.]+) ([0-9.]+) ([0-9.]+))"

--
Benoit Izac
Avatar
Jacques L'helgoualc'h
Le 01-12-2007, Guillaume Connan a écrit :
Bonjour,



bonjour,

j'ai beau mettre des //(, $ partout, je n'arrive pas à remplacer des
occurences du type :



Forcément, c'est des qu'il faut mettre :)

(0.253 0.754 0.778)

par

(0.253,0.754,0.778)



C-M-% ((0.[0-9]+) +(0.[0-9]+) (0.[0-9]+)) RET (1,2,3) RET

et si (elisp) tu mets entre "", il faut doubler les backslashes.

Merci



de rien,
--
Jacques L'helgoualc'h
Avatar
Jacques L'helgoualc'h
Le 01-12-2007, Guillaume Connan a écrit :
Bonjour,



bonjour,

j'ai beau mettre des //(, $ partout, je n'arrive pas à remplacer des
occurences du type :



Forcément, c'est des qu'il faut mettre :)

(0.253 0.754 0.778)

par

(0.253,0.754,0.778)



C-M-% ((0.[0-9]+) +(0.[0-9]+) +(0.[0-9]+)) RET (1,2,3) RET

et si (elisp) tu mets entre "", il faut doubler les backslashes.

Merci



de rien,
--
Jacques L'helgoualc'h
Avatar
Sébastien Kirche
Le 1 décembre 2007 à 15:47, Guillaume Connan s'est exprimé ainsi :

Bonjour,



Salut,

j'ai beau mettre des //(, $ partout, je n'arrive pas à remplacer des
occurences du type :



Peut-être parce que tu confonds avec des ( ?


(0.253 0.754 0.778)

par

(0.253,0.754,0.778)

C'est pour des codes de couleur : il y en a 256...



Je te propose (c'est sans doute moche mais ça semble fonctionner avec
l'exemple que tu as donné) :

C-M-%
(([[:digit:]]+.[[:digit:]]+)W([[:digit:]]+.[[:digit:]]+)W([[:digit:]]+.[[:digit:]]+))
RET (1,2,3)

J'utilise les classes de caractères mais tu peux utiliser un simple
[0-9] à la place.

Si c'est ok sur les premières occurrences tu peux envoyer le reste avec !

M-x re-builder roulaize...
--
Sébastien Kirche
Avatar
Guillaume Connan
Le 1 décembre 2007 à 16:12, Jacques L'helgoualc'h aurait pu téléphoner
mais a préféré m'écrire le doux billet suivant :


j'ai beau mettre des //(, $ partout, je n'arrive pas à remplacer des
occurences du type :



Forcément, c'est des qu'il faut mettre :)



Une faute de frappe dans le message...

et si (elisp) tu mets entre "", il faut doubler les backslashes.



Ah, ben voilà : je les avais doublés dans le mini buffer

Jacques, que ferai-je sans toi ? Et dire que l'Educ nat s'est séparée de toi...

--
Guillaume Connan

http://gconnan.free.fr
Avatar
Jacques L'helgoualc'h
Le 01-12-2007, Sébastien Kirche a écrit :
[...]
Je te propose (c'est sans doute moche mais ça semble fonctionner avec
l'exemple que tu as donné) :

C-M-%
(([[:digit:]]+.[[:digit:]]+)W([[:digit:]]+.[[:digit:]]+)W([[:digit:]]+.[[:digit:]]+))
RET (1,2,3)

J'utilise les classes de caractères mais tu peux utiliser un simple
[0-9] à la place.



C'est plus vite tapé... est-ce que [:digit:] correspond /toujours/ à 0-9 ?
(avec UTF-8 je m'attends au pire :).

Si c'est ok sur les premières occurrences tu peux envoyer le reste avec !



Si les nombres sont entre 0 et 1, la partie décimale pourrait être
omise, donc

((0(?:.[0-9]+)?|1))[[:space:]]+ ... ) RET (1,2,3)

Le W me semble un peu trop général ? Ta regexp ne convertit pas

(1 0.666 0)

mais transforme

(1 (2 (3))

en

(1,2,3))

M-x re-builder roulaize...



Fainéant :)
--
Jacques L'helgoualc'h
Avatar
Jacques L'helgoualc'h
Le 01-12-2007, Sébastien Kirche a écrit :
[...]
Je te propose (c'est sans doute moche mais ça semble fonctionner avec
l'exemple que tu as donné) :

C-M-%
(([[:digit:]]+.[[:digit:]]+)W([[:digit:]]+.[[:digit:]]+)W([[:digit:]]+.[[:digit:]]+))
RET (1,2,3)

J'utilise les classes de caractères mais tu peux utiliser un simple
[0-9] à la place.



C'est plus vite tapé... est-ce que [:digit:] correspond /toujours/ à 0-9 ?
(avec UTF-8 je m'attends au pire :).

Si c'est ok sur les premières occurrences tu peux envoyer le reste avec !



Si les nombres sont entre 0 et 1, la partie décimale pourrait être
omise, donc

((0(?:.[0-9]+)?|1))[[:space:]]+ ... ) RET (1,2,3)

Le W me semble un peu trop général ? Ta regexp ne convertit pas

(1 0.666 0)

mais transforme

(1.0 (2.0 (3.0))

en

(1.0,2.0,3.0))

M-x re-builder roulaize...



Fainéant :)
--
Jacques L'helgoualc'h
Avatar
Sébastien Kirche
Le 1 décembre 2007 à 17:08, Jacques L'helgoualc'h a dit :

C'est plus vite tapé... est-ce que [:digit:] correspond /toujours/ à
0-9 ? (avec UTF-8 je m'attends au pire :).



Je ne sais pas, je suis toujours en latin1/9/0.

> Si c'est ok sur les premières occurrences tu peux envoyer le reste
> avec !

Si les nombres sont entre 0 et 1, la partie décimale pourrait être
omise, donc

((0(?:.[0-9]+)?|1))[[:space:]]+ ... ) RET (1,2,3)

Le W me semble un peu trop général ? Ta regexp ne convertit pas

(1 0.666 0)

mais transforme

(1.0 (2.0 (3.0))

en

(1.0,2.0,3.0))



C'est vrai W n'était pas le plus adapté. J'aurais aussi pu utiliser
l'espace directement dans la regexp, vu que le cas en question
concernait seulement une petite série de remplacement à usage unique.
Seul l'OP connaît vraiment le cadre d'utilisation.

J'ai un peu tendance à généraliser le code en pensant que ça pourrait
resservir pour une autre utilisation. Je passe beaucoup de temps en ce
moment à maintenir / modifier du code absolument pas générique, écrit
pour des cas particuliers et pour lequel je rame à étendre le domaine
d'utilisation...


> M-x re-builder roulaize...

Fainéant :)



Mouais. Ces dernier jours j'ai mangé pas mal de regexps sed/perl et
aussi d'autres utilisées dans du code vba (MS Excel) et bien évidement
les syntaxes ne sont pas les mêmes dès qu'on sort des bases. Et pour le
cas qui nous intéresse ici, Emacs apporte aussi sont lot de différences.
re-builder est alors bien pratique pour retrouver les bonnes syntaxes.

--
Sébastien Kirche