Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Gaborit
À (at) 12 Apr 2007 15:00:46 -0700, écrivait (wrote):
J'aimerais savoir si on peut à l'aide d'une expression régulière comparer deux mots pour effacer la partie qui chevauche. Ainsi, si on a:
Pierrre ==> Pierette, Pierreta, Pierrina = tte,ta,ina Raymond ==> Raymonde, Raymonda, Raymondina = e,a,ina René ==> Renée = e Claude ==> Claude, Claudette = tte
Je voudrais utiliser cette expression regulière sous forme de commande perl.
On peut faire un truc comme ça :
my $mot = "Pierre"; # par exemple my $exp = ""; foreach my $l (1..length $mot) { $exp = substr($mot,0,$l) . "|$exp"; } $exp = qr/($exp)/; print "$expn"; # pour voir à quoi ça ressemble...
Ça marche bien si $mot ne contient pas de caractères ayant un sens spécial pour les regexp. Sinon, il faudra utiliser en plus des appels à quotemeta() ou à Q..E.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 12 Apr 2007 15:00:46 -0700,
nicolas_laurent545@hotmail.com écrivait (wrote):
J'aimerais savoir si on peut à l'aide d'une expression régulière
comparer deux mots pour effacer la partie qui chevauche. Ainsi, si on
a:
Pierrre ==> Pierette, Pierreta, Pierrina = tte,ta,ina
Raymond ==> Raymonde, Raymonda, Raymondina = e,a,ina
René ==> Renée = e
Claude ==> Claude, Claudette = tte
Je voudrais utiliser cette expression regulière sous forme de commande
perl.
On peut faire un truc comme ça :
my $mot = "Pierre"; # par exemple
my $exp = "";
foreach my $l (1..length $mot) {
$exp = substr($mot,0,$l) . "|$exp";
}
$exp = qr/($exp)/;
print "$expn"; # pour voir à quoi ça ressemble...
Ça marche bien si $mot ne contient pas de caractères ayant un sens
spécial pour les regexp. Sinon, il faudra utiliser en plus des appels
à quotemeta() ou à Q..E.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 12 Apr 2007 15:00:46 -0700, écrivait (wrote):
J'aimerais savoir si on peut à l'aide d'une expression régulière comparer deux mots pour effacer la partie qui chevauche. Ainsi, si on a:
Pierrre ==> Pierette, Pierreta, Pierrina = tte,ta,ina Raymond ==> Raymonde, Raymonda, Raymondina = e,a,ina René ==> Renée = e Claude ==> Claude, Claudette = tte
Je voudrais utiliser cette expression regulière sous forme de commande perl.
On peut faire un truc comme ça :
my $mot = "Pierre"; # par exemple my $exp = ""; foreach my $l (1..length $mot) { $exp = substr($mot,0,$l) . "|$exp"; } $exp = qr/($exp)/; print "$expn"; # pour voir à quoi ça ressemble...
Ça marche bien si $mot ne contient pas de caractères ayant un sens spécial pour les regexp. Sinon, il faudra utiliser en plus des appels à quotemeta() ou à Q..E.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
jl_morel
Dans l'article , a dit...
J'aimerais savoir si on peut à l'aide d'une expression régulière comparer deux mots pour effacer la partie qui chevauche. Ainsi, si on a:
Pierrre ==> Pierette, Pierreta, Pierrina = tte,ta,ina Raymond ==> Raymonde, Raymonda, Raymondina = e,a,ina René ==> Renée = e Claude ==> Claude, Claudette = tte
Si les mots sont séparés par une espace dans la chaine, on peut faire ça : (si les mots ne se chevauchent pas, la chaine n'est pas modifiée)
#!/usr/bin/perl use strict; use warnings;
my $s = "Raymonde Raymonda Raymondina";
my $reg = '(S+)'.'.* 1' x $s=~tr/ / /; # regexp paramétrée $s =~ s/$1//g if $s =~ /$reg/;
print $s; # renvoie la chaine "e a ina"
__END__
HTH -- J-L.M. http://www.bribes.org/perl
Dans l'article <1176415246.318661.80060@y80g2000hsf.googlegroups.com>,
nicolas_laurent545@hotmail.com a dit...
J'aimerais savoir si on peut à l'aide d'une expression régulière
comparer deux mots pour effacer la partie qui chevauche. Ainsi, si on
a:
Pierrre ==> Pierette, Pierreta, Pierrina = tte,ta,ina
Raymond ==> Raymonde, Raymonda, Raymondina = e,a,ina
René ==> Renée = e
Claude ==> Claude, Claudette = tte
Si les mots sont séparés par une espace dans la chaine, on peut faire ça :
(si les mots ne se chevauchent pas, la chaine n'est pas modifiée)
#!/usr/bin/perl
use strict;
use warnings;
my $s = "Raymonde Raymonda Raymondina";
my $reg = '(S+)'.'.* 1' x $s=~tr/ / /; # regexp paramétrée
$s =~ s/$1//g if $s =~ /$reg/;