probleme avec la fin de la ligne

probleme avec la fin de la ligne - Perl - Programmation

Marsh Posté le 28-11-2014 à 23:01:45    

salut
j'ai un fichier texte que je dois filtrer. pour supprimer les mots ayant 3 caractères j'utilise l'expression régulière
 while($line =~ m/ [0-9a-zA-Z_][0-9a-zA-Z_][0-9a-zA-Z_] /) {$line=~ s/ [0-9a-zA-Z_][0-9a-zA-Z_][0-9a-zA-Z_]/ / ;}
 
ca marche sauf pour les fins de lignes puisque j'ai pas d'espace à la fin.
meme en utilisant l'expression
while($line =~ m/ [0-9a-zA-Z_][0-9a-zA-Z_][0-9a-zA-Z_]\n /) {$line=~ s/ [0-9a-zA-Z_][0-9a-zA-Z_][0-9a-zA-Z_]/ / ;}  
ca donne des erreurs

Reply

Marsh Posté le 28-11-2014 à 23:01:45   

Reply

Marsh Posté le 29-11-2014 à 01:23:29    

A la base, ce que vous voulez faire, c'est s/\b\w{3}\b//g;
A vous de traiter ensuite si nécessaire les blancs multiples générés par un effacement de mot.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 29-11-2014 à 07:03:23    

votre code marche bien mieux que le mien.
encore une petite question  :whistle:  
je dois filtrer mon texte et pour cela j'utilise une liste de mots à supprimer et j'écris le code suivant:
 
if( $line =~ m/la | les | des | eu | mon | mes | euh |euh | ou / ) { $line =~ s/la | les | des | eu | mon | mes | euh |euh |ou / / ;}
 
vous avez peut etre une autre suggestion à me proposer ?
 
merci

Reply

Marsh Posté le 29-11-2014 à 15:38:57    

Je procéderais ainsi:
 
1) mettre mes mots a virer comme une regexp
2) transformer une ligne en liste de mots (split), la filtrer avec grep pour en retirer les mots à virer et réassembler les mots en ligne (join)
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. my $line = 'la petite fleur des Alpes';
  6. my $remove = '('.join('|', qw(la les des eu mon mes euh ou)).')';
  7.  
  8. my $re = qr{$remove}o;
  9. $line = join('', grep(!/^$re$/, split /\b/, $line));
  10. $line =~ s /( )+/ /g;
  11. print $line;


 
Si on est sur que l'on n'a que des mots séparés par des blancs (pas de tab ou autres séparateurs unicode) on peut faire plus simple (mais ça bouffe les \n de fin de phrase, qu'on peut rajouter en fin de traitement si nécessaire):

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. my $line = 'la petite fleur des Alpes';
  6. my $remove = '('.join('|', qw(la les des eu mon mes euh ou)).')';
  7.  
  8. my $re = qr{$remove}o;
  9. $line = join(' ', grep(!/^$re$/, split ' ', $line));
  10. print $line;


 
A+,


Message édité par gilou le 29-11-2014 à 15:47:13

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed