2010-07-29 6 views
5

J'essaie de diviser une chaîne avec plusieurs espaces blancs. Je veux seulement diviser où il y a 2 espaces blancs ou plus. J'ai essayé plusieurs choses et je continue d'obtenir la même sortie, c'est-à-dire qu'elle se divise après chaque lettre. Voici la dernière chose que j'ai essayéDiviser une chaîne avec plusieurs espaces blancs avec Perl?

@cellMessage = split(s/ {2,}//g, $message); 
       foreach(@cellMessage){ 
        print "$_ \n"; 
       } 
+0

Marquer cette question avec la langue que vous utilisez et vous obtiendrez plus de réponses. – JnBrymn

+0

ressemble à perl pour moi. ;) – relet

+0

Ouais ... je ne connais pas Perl, mais ça me ressemble à Perl. Probablement une faute de frappe, alors. ; P – strager

Répondre

12
@cellMessage = split(/ {2,}/, $message); 
+0

Génial qui a bien fonctionné – shinjuo

+1

Mais ce n'est pas vraiment un espace, seulement des espaces. \ s vous donnera également des onglets: @cellMessage = split (/ \ s {2,} /, $ message); – Erik

+0

Un autre petit raffinement serait d'utiliser + au lieu de {2,}. Le + signifie exactement cela, "au moins un de": split (/ \ s + /, $ message); –

-1

Essayez celui-ci: \b(\s{2,})\b

Cela devrait vous faire quoi que ce soit avec de multiples espaces entre les mots boundries.

+0

La syntaxe fractionnée de Shinjuo était erronée. Cela n'a rien à voir avec les limites des mots. Erik a la bonne réponse. – jmz

9

Garder la syntaxe que vous avez utilisé dans votre exemple, je recommande ceci:

@cellMessage = split(/\s{2,}/, $message); 
       foreach(@cellMessage){ 
        print "$_ \n"; 
       } 

parce que vous correspond à tout caractère espaces (onglets, espaces, etc ...). Le problème avec votre code d'origine était que l'instruction split est à la recherche d'un motif et le regex que vous avez fourni a été traduit dans la chaîne vide //, qui divise $message en caractères individuels.

2
use strict; 
use warnings; 
use Data::Dumper; 

#     1 22  333 
my $message = 'this that other 555'; 
my @cellMessage = split /\s{2,}/, $message; 
print Dumper(\@cellMessage); 

__END__ 

$VAR1 = [ 
      'this that', 
      'other', 
      '555' 
     ]; 
0

Vous pouvez réellement faire:

@cellMessage = split (/ \ s + /, $ message);

Il fait la même chose que "@cellMessage = split (/ {2,} /, $ message);" mais a l'air un peu plus propre à moi imo.

+3

ne vous méprenez pas, mal lu la question. mauvaise réponse ici, cela ne fonctionne que pour 1 ou plusieurs espaces – user2506092

Questions connexes