Le 23 octobre 2015 à 13:57, Jean-Jacques Rétorré a dit :
ven. 23 oct. 2015, nous disait que :
> Le mardi 20 octobre 2015 00:27:46 UTC+2, Sébastien Kirche a écrit : > > Le 19 octobre 2015 à 22:31, Jean-Jacques Rétorré vraute : > > > > > > M-x query-replace-regexp RET > > > > > > > > motif à rechercher: (sdnum|sdval)=".*" > > > > à remplacer par "" (chaine vide) > > > > > > Je crains que ça ne marche pas si la chaîne à virer est sur > > > plusieurs lignes. > > > > Effectivement, je n'avait pas testé/pensé ce cas en absence de > > fichier d'exemple. > > Attention! Il y a un autre cas! > > S'il y a plusieurs propriétés sur la même ligne, comme: > > sdnum="v1" p2="v2" > > et qu'on veut supprimer sdnum mais pas p2, il ne faut PAS utiliser > (sdnum|sdval)=".*" qui "matche" toute la ligne, mais plutôt la > regex proposée par JJ Rétorré: b(sdnum|sdval)="[^"]*" > éventuellement prolongée par une suite d'espaces
Je n'avais pas envisagé ce cas non plus... Dans l'intervale, je suis tombé sur un interressant article[¹] sur le fonctionnement d'un moteur de regex lorsqu'on utilise '.*' avec quelque chose derrière : c'est plutôt contre-performant et la solution '[^"]' est bien plus satisfaisante.
J'étudie un peu le fonctionnement des analyseurs lexicaux et des regex et je sais que tous les moteurs ne fonctionnent pas de la même manière. Peut-être qu'Emacs ne souffre pas des mêmes tares que Perl[²] au niveau du backtracking ? Mais les autres problèmes exposés pas J-J Rétorré restent.
> S'il y a un cas comme sdnum="valeur entre "guillemets"" > ça risque d'être encore plus coton...
J'avais appris ici l'usage de cette regexp pour remplacer les "..." par «...» dans un texte. Que mon tuteur soit remercié.
Un bon moyen de tester une regexp est d'utiliser re-builder sur un fichier choisi à cet effet.
J'ai prototypé avec re-builder, mais c'est bien connu : le programmeur teste toujours les cas qu'_il_ a prévu :o)
[¹] https://blog.mariusschulz.com/2014/06/03/why-using-in-regular-expressions-is-almost-never-what-you-actually-want [²] https://swtch.com/~rsc/regexp/regexp1.html -- Sébastien Kirche
Le 23 octobre 2015 à 13:57, Jean-Jacques Rétorré a dit :
ven. 23 oct. 2015, duthen.mac.01@gmail.com nous disait que :
> Le mardi 20 octobre 2015 00:27:46 UTC+2, Sébastien Kirche a écrit :
> > Le 19 octobre 2015 à 22:31, Jean-Jacques Rétorré vraute :
> >
> > > > M-x query-replace-regexp RET
> > > >
> > > > motif à rechercher: (sdnum|sdval)=".*"
> > > > à remplacer par "" (chaine vide)
> > >
> > > Je crains que ça ne marche pas si la chaîne à virer est sur
> > > plusieurs lignes.
> >
> > Effectivement, je n'avait pas testé/pensé ce cas en absence de
> > fichier d'exemple.
>
> Attention! Il y a un autre cas!
>
> S'il y a plusieurs propriétés sur la même ligne, comme:
>
> sdnum="v1" p2="v2"
>
> et qu'on veut supprimer sdnum mais pas p2, il ne faut PAS utiliser
> (sdnum|sdval)=".*" qui "matche" toute la ligne, mais plutôt la
> regex proposée par JJ Rétorré: b(sdnum|sdval)="[^"]*"
> éventuellement prolongée par une suite d'espaces
Je n'avais pas envisagé ce cas non plus... Dans l'intervale, je suis
tombé sur un interressant article[¹] sur le fonctionnement d'un moteur
de regex lorsqu'on utilise '.*' avec quelque chose derrière : c'est
plutôt contre-performant et la solution '[^"]' est bien plus
satisfaisante.
J'étudie un peu le fonctionnement des analyseurs lexicaux et des regex
et je sais que tous les moteurs ne fonctionnent pas de la même manière.
Peut-être qu'Emacs ne souffre pas des mêmes tares que Perl[²] au niveau du
backtracking ? Mais les autres problèmes exposés pas J-J Rétorré restent.
> S'il y a un cas comme sdnum="valeur entre "guillemets""
> ça risque d'être encore plus coton...
J'avais appris ici l'usage de cette regexp pour remplacer les "..."
par «...» dans un texte. Que mon tuteur soit remercié.
Un bon moyen de tester une regexp est d'utiliser re-builder sur un
fichier choisi à cet effet.
J'ai prototypé avec re-builder, mais c'est bien connu : le programmeur
teste toujours les cas qu'_il_ a prévu :o)
[¹] https://blog.mariusschulz.com/2014/06/03/why-using-in-regular-expressions-is-almost-never-what-you-actually-want
[²] https://swtch.com/~rsc/regexp/regexp1.html
--
Sébastien Kirche
Le 23 octobre 2015 à 13:57, Jean-Jacques Rétorré a dit :
ven. 23 oct. 2015, nous disait que :
> Le mardi 20 octobre 2015 00:27:46 UTC+2, Sébastien Kirche a écrit : > > Le 19 octobre 2015 à 22:31, Jean-Jacques Rétorré vraute : > > > > > > M-x query-replace-regexp RET > > > > > > > > motif à rechercher: (sdnum|sdval)=".*" > > > > à remplacer par "" (chaine vide) > > > > > > Je crains que ça ne marche pas si la chaîne à virer est sur > > > plusieurs lignes. > > > > Effectivement, je n'avait pas testé/pensé ce cas en absence de > > fichier d'exemple. > > Attention! Il y a un autre cas! > > S'il y a plusieurs propriétés sur la même ligne, comme: > > sdnum="v1" p2="v2" > > et qu'on veut supprimer sdnum mais pas p2, il ne faut PAS utiliser > (sdnum|sdval)=".*" qui "matche" toute la ligne, mais plutôt la > regex proposée par JJ Rétorré: b(sdnum|sdval)="[^"]*" > éventuellement prolongée par une suite d'espaces
Je n'avais pas envisagé ce cas non plus... Dans l'intervale, je suis tombé sur un interressant article[¹] sur le fonctionnement d'un moteur de regex lorsqu'on utilise '.*' avec quelque chose derrière : c'est plutôt contre-performant et la solution '[^"]' est bien plus satisfaisante.
J'étudie un peu le fonctionnement des analyseurs lexicaux et des regex et je sais que tous les moteurs ne fonctionnent pas de la même manière. Peut-être qu'Emacs ne souffre pas des mêmes tares que Perl[²] au niveau du backtracking ? Mais les autres problèmes exposés pas J-J Rétorré restent.
> S'il y a un cas comme sdnum="valeur entre "guillemets"" > ça risque d'être encore plus coton...
J'avais appris ici l'usage de cette regexp pour remplacer les "..." par «...» dans un texte. Que mon tuteur soit remercié.
Un bon moyen de tester une regexp est d'utiliser re-builder sur un fichier choisi à cet effet.
J'ai prototypé avec re-builder, mais c'est bien connu : le programmeur teste toujours les cas qu'_il_ a prévu :o)
[¹] https://blog.mariusschulz.com/2014/06/03/why-using-in-regular-expressions-is-almost-never-what-you-actually-want [²] https://swtch.com/~rsc/regexp/regexp1.html -- Sébastien Kirche
Escargot
Le 19/10/2015 22:21, Jean-Jacques Rétorré a écrit :
lun. 19 oct. 2015, Escargot nous disait que :
Bonjour,
J'ai convertis un fichier tableur (LibreOffice Calc) en html pour pouvoir le lire directement avec un navigateur Web.
Ce fichier a dans ses balises des "propriétés" propres à LibreOffice :
sdnum=" [du texte] " sdval=" [une valeur] "
Comment faire avec Emacs pour enlever toutes ces "propriétés" et rendre ainsi le fichier html plus léger ?
Le problème (pour moi) est que le texte ou la valeur indiqués entre guillements ne sont pas toujours les mêmes.
Merci pour vos réponses.
J.
La regerxp :
b(sdnum|sdval)="[^"]*"
matche toutes les expressions que tu veux éliminer (chais plus comment on dit en français). Il suffit de faire une recherche et remplacement par une chaîne vide.
Par exemple
C-M-% b(sdnum|sdval)="[^"]*" RET RET !
Merci pour cette excellente réponse.
Je n'ai pu répondre plus tôt ayant eu une panne Internet.
J.
Le 19/10/2015 22:21, Jean-Jacques Rétorré a écrit :
lun. 19 oct. 2015, Escargot<escargot@yopmail.com> nous disait que :
Bonjour,
J'ai convertis un fichier tableur (LibreOffice Calc) en html pour
pouvoir le lire directement avec un navigateur Web.
Ce fichier a dans ses balises des "propriétés" propres à LibreOffice :
sdnum=" [du texte] "
sdval=" [une valeur] "
Comment faire avec Emacs pour enlever toutes ces "propriétés" et
rendre ainsi le fichier html plus léger ?
Le problème (pour moi) est que le texte ou la valeur indiqués entre
guillements ne sont pas toujours les mêmes.
Merci pour vos réponses.
J.
La regerxp :
b(sdnum|sdval)="[^"]*"
matche toutes les expressions
que tu veux éliminer (chais plus comment on dit en français). Il suffit
de faire une recherche et remplacement par une chaîne vide.
Par exemple
C-M-% b(sdnum|sdval)="[^"]*" RET RET !
Merci pour cette excellente réponse.
Je n'ai pu répondre plus tôt ayant eu une panne Internet.
Le 19/10/2015 22:21, Jean-Jacques Rétorré a écrit :
lun. 19 oct. 2015, Escargot nous disait que :
Bonjour,
J'ai convertis un fichier tableur (LibreOffice Calc) en html pour pouvoir le lire directement avec un navigateur Web.
Ce fichier a dans ses balises des "propriétés" propres à LibreOffice :
sdnum=" [du texte] " sdval=" [une valeur] "
Comment faire avec Emacs pour enlever toutes ces "propriétés" et rendre ainsi le fichier html plus léger ?
Le problème (pour moi) est que le texte ou la valeur indiqués entre guillements ne sont pas toujours les mêmes.
Merci pour vos réponses.
J.
La regerxp :
b(sdnum|sdval)="[^"]*"
matche toutes les expressions que tu veux éliminer (chais plus comment on dit en français). Il suffit de faire une recherche et remplacement par une chaîne vide.
Par exemple
C-M-% b(sdnum|sdval)="[^"]*" RET RET !
Merci pour cette excellente réponse.
Je n'ai pu répondre plus tôt ayant eu une panne Internet.
J.
Lucas Levrel
Le 24 octobre 2015, Sébastien Kirche a écrit :
Je n'avais pas envisagé ce cas non plus... Dans l'intervale, je suis tombé sur un interressant article[¹] sur le fonctionnement d'un moteur de regex lorsqu'on utilise '.*' avec quelque chose derrière : c'est plutôt contre-performant et la solution '[^"]' est bien plus satisfaisante.
J'étudie un peu le fonctionnement des analyseurs lexicaux et des regex et je sais que tous les moteurs ne fonctionnent pas de la même manière. Peut-être qu'Emacs ne souffre pas des mêmes tares que Perl[²] au niveau du backtracking ? Mais les autres problèmes exposés pas J-J Rétorré restent.
Pour obtenir le même effet que [^"] j'aurais plutôt mis .*? qui ne devrait pas (?) poser le problème du backtracking.
-- LL Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
Le 24 octobre 2015, Sébastien Kirche a écrit :
Je n'avais pas envisagé ce cas non plus... Dans l'intervale, je suis
tombé sur un interressant article[¹] sur le fonctionnement d'un moteur
de regex lorsqu'on utilise '.*' avec quelque chose derrière : c'est
plutôt contre-performant et la solution '[^"]' est bien plus
satisfaisante.
J'étudie un peu le fonctionnement des analyseurs lexicaux et des regex
et je sais que tous les moteurs ne fonctionnent pas de la même manière.
Peut-être qu'Emacs ne souffre pas des mêmes tares que Perl[²] au niveau du
backtracking ? Mais les autres problèmes exposés pas J-J Rétorré restent.
Pour obtenir le même effet que [^"] j'aurais plutôt mis .*? qui ne
devrait pas (?) poser le problème du backtracking.
Je n'avais pas envisagé ce cas non plus... Dans l'intervale, je suis tombé sur un interressant article[¹] sur le fonctionnement d'un moteur de regex lorsqu'on utilise '.*' avec quelque chose derrière : c'est plutôt contre-performant et la solution '[^"]' est bien plus satisfaisante.
J'étudie un peu le fonctionnement des analyseurs lexicaux et des regex et je sais que tous les moteurs ne fonctionnent pas de la même manière. Peut-être qu'Emacs ne souffre pas des mêmes tares que Perl[²] au niveau du backtracking ? Mais les autres problèmes exposés pas J-J Rétorré restent.
Pour obtenir le même effet que [^"] j'aurais plutôt mis .*? qui ne devrait pas (?) poser le problème du backtracking.