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

Expression rationnelle pour un remplacement

6 réponses
Avatar
denebet
Bonjour,


Je vous prie d'excuser le côté "consommateur" de ma demande, mais après
l'essai de différents tuto pour les expressions régulières, je n'y arrive
pas et je dois finir pour ce soir.
J'ai une série de ligne dans un fichier du type

http://archive.ubuntu.com/ubuntu/pool/main/a/aalib/libaa1_1.4p5-32_i386.deb
libaa1_1.4p5-32_i386.deb 57348 dacfc0cd800354d16ebc658faac68f9a
http://archive.ubuntu.com/ubuntu/pool/main/a/abiword/abiword_2.4.6-2ubuntu2_i386.deb
abiword_2.4.6-2ubuntu2_i386.deb 2640872 19baff2f1c8522868253c1dc9d8976b8

C'est à dire, séparés par des espaces :
[URL complète du fichier] [nom du paquet] [taille] [somme MD5].

J'aurai besoin de virer tout ce qui suit l'url du fichier, en gardant le
retour chariot.
Quelle est l'expression régulière qui pourrait faire cela ?

Merci d'avance,

Alain

6 réponses

Avatar
Thomas vO
bonjour,

À (at) Wed, 24 Oct 2007 14:37:13 +0200,
denebet nous disait (told us):
C'est à dire, séparés par des espaces :
[URL complète du fichier] [nom du paquet] [taille] [somme MD5].

J'aurai besoin de virer tout ce qui suit l'url du fichier, en gardant le
retour chariot.
Quelle est l'expression régulière qui pourrait faire cela ?


pas trop testé, mais :

s/^(.[^s]*)s.*$/$1/

a l'air de convenir...

--
Thomas vO - <http://perso.enstimac.fr/~vanouden/>

Avatar
denebet
Thomas vO wrote:

s/^(.[^s]*)s.*$/$1/


Nickel !

Merci, et bonne journée.

Alain

Avatar
Paul Gaborit
À (at) Wed, 24 Oct 2007 14:37:13 +0200,
denebet écrivait (wrote):
J'ai une série de ligne dans un fichier du type

http://archive.ubuntu.com/ubuntu/pool/main/a/aalib/libaa1_1.4p5-32_i386.deb
libaa1_1.4p5-32_i386.deb 57348 dacfc0cd800354d16ebc658faac68f9a
http://archive.ubuntu.com/ubuntu/pool/main/a/abiword/abiword_2.4.6-2ubuntu2_i386.deb
abiword_2.4.6-2ubuntu2_i386.deb 2640872 19baff2f1c8522868253c1dc9d8976b8

C'est à dire, séparés par des espaces :
[URL complète du fichier] [nom du paquet] [taille] [somme MD5].

J'aurai besoin de virer tout ce qui suit l'url du fichier, en gardant le
retour chariot.
Quelle est l'expression régulière qui pourrait faire cela ?


Inutile d'utiliser une expression régulière pour cela. On peut
utiliser 'index' et 'substr' (en supposant que la ligne à traiter est
dans $ligne) :

my $newligne = substr $line, 0, index $ligne, ' ';
$newligne .= "n";

La fonction 'index' est toujours beaucoup plus rapide qu'une
expression rationnelle (si on cherche une chaîne fixe évidemment).

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Paul Gaborit
À (at) Wed, 24 Oct 2007 17:01:15 +0200,
Paul Gaborit écrivait (wrote):
Inutile d'utiliser une expression régulière pour cela. On peut
utiliser 'index' et 'substr' (en supposant que la ligne à traiter est
dans $ligne) :

my $newligne = substr $line, 0, index $ligne, ' ';
$newligne .= "n";


Ce qui donne, avec les bons noms de variables :

my $newligne = substr $ligne, 0, index $ligne, ' ';
$newligne .= "n";


--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Stéphane Müller
Inutile d'utiliser une expression régulière pour cela. On peut
utiliser 'index' et 'substr' (en supposant que la ligne à
traiter est
dans $ligne) :

my $newligne = substr $line, 0, index $ligne, ' ';
$newligne .= "n";


Perso, j'aurai eu tendance à utiliser split:

my $newligne = (split ' ',$line)[0] . "n";

Est-ce moins efficace ?

Avatar
Paul Gaborit
À (at) Thu, 25 Oct 2007 10:06:19 +0200,
"Stéphane Müller" écrivait (wrote):
Inutile d'utiliser une expression régulière pour cela. On peut
utiliser 'index' et 'substr' (en supposant que la ligne à
traiter est
dans $ligne) :

my $newligne = substr $line, 0, index $ligne, ' ';
$newligne .= "n";


Perso, j'aurai eu tendance à utiliser split:

my $newligne = (split ' ',$line)[0] . "n";

Est-ce moins efficace ?


À une époque, ça l'était (moins efficace) car le séparateur de 'split'
est potentiellement une expression rationnelle. Mais il est fort
possible que les optimisations sous-jacentes rendent cela équivalent...

Il faudrait faire quelques mesures de performances. ;-)

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>