2010-07-29 23 views
5

Estoy tratando de dividir una cadena con múltiples espacios en blanco. Solo quiero dividir donde hay 2 o más espacios en blanco. He intentado varias cosas y sigo obteniendo el mismo resultado, ya que se divide después de cada letra. Aquí es la última cosa que probéDividir una cadena con múltiples espacios en blanco con perl?

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

Marque esta pregunta con el idioma que usa y obtendrá más respuestas. – JnBrymn

+0

me parece perl. ;) – relet

+0

Sí ... No sé Perl, pero me parece a Perl. Probablemente un error tipográfico, entonces. ; P – strager

Respuesta

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

Impresionante que funcionó muy bien – shinjuo

+1

Pero no es realmente espacios en blanco, solo espacios. \ s también le dará pestañas: @cellMessage = split (/ \ s {2,} /, $ mensaje); – Erik

+0

Otro pequeño refinamiento sería usar + en lugar de {2,}. El + significa exactamente eso, "al menos uno de": split (/ \ s + /, $ message); –

-1

prueba este: \b(\s{2,})\b

Eso debe conseguirle cualquier cosa con múltiples espacios entre limites de palabras.

+0

La sintaxis de división de Shinjuo era incorrecta. No tiene nada que ver con los límites de las palabras. Erik tiene la respuesta correcta. – jmz

9

Mantener la sintaxis que utilizó en su ejemplo Recomendaría este:

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

ya que tendrá que coincida con cualquier carácter de espacio en blanco (tabulaciones, espacios, etc ...). El problema con el código original era que la instrucción split está buscando un patrón y la expresión regular que proporcionó estaba dando como resultado la cadena vacía //, que divide $message en caracteres individuales.

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

en realidad se puede hacer:

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

Hace lo mismo que "@cellMessage = split (/ {2,} /, $ message);" pero parece un poco más limpio para mí imo.

+3

no importa, malinterpretó la pregunta. mala respuesta aquí, solo funciona para 1 o más espacios – user2506092

Cuestiones relacionadas