2010-11-03 3 views
0

J'ai ces deux sortes de cordes:perl substitution vide dans une chaîne

EVASA   2144 
IN ELABORAZIONE   16278 

J'ai besoin un script Perl pour remplacer tous les espaces vides avec un seul.

La sortie I besoin est:

EVASA 2144 

Toute suggestion?

Répondre

7

Vous pouvez utiliser une expression régulière très simple:

#!/usr/bin/perl 
use strict; 

my $line = 'EVASA   2144'; 

# This is the line that actually does the work 
$line =~ s/\s+/ /g; 

print $line, "\n"; 
+1

-w ou d'utiliser des avertissements! – ysth

2
$a = "hello \t world"; 
$a =~ s/\s+/ /; 
print $a; 

si vous pouvez avoir plusieurs endroits dans la chaîne où vous voulez que la substitution ait lieu, utiliser

$a = "hello \t world hi"; 
$a =~ s/\s+/ /g; 
print $a; 
4

Ma suggestion serait que vous passiez un peu de temps à lire le Regular Expression tutorial qui est distribué avec chaque version moderne de Perl.

+1

Je suis d'accord avec vous, mais parfois j'adore l'interprétation humaine d'une solution. Ça me fait comprendre plus que de lire un livre! Je lis déjà le livre que tu m'as suggéré! Merci! – Kerby82

0

Vous pouvez également utiliser l'opérateur tr avec l's Option, cela peut faire plus de choses pour vous (personnages de transformation), sans doute plus vite que l'approche regexp

$a =~ tr/ \t/ /s; 

Explication se trouve dans le perlop manpage:

perldoc perlop 
Questions connexes