regexp

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Benoit Izac
Le #21781351
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
Jacques L'helgoualc'h
Le #21781341
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
Jacques L'helgoualc'h
Le #21781331
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
Sébastien Kirche
Le #21781321
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
Guillaume Connan
Le #21781311
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
Jacques L'helgoualc'h
Le #21781301
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
Jacques L'helgoualc'h
Le #21781291
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
Sébastien Kirche
Le #21781281
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
Publicité
Poster une réponse
Anonyme