Разбить строку на несколько пробелов с помощью perl? - PullRequest
6 голосов
/ 30 июля 2010

Я пытаюсь разбить строку на несколько пробелов. Я хочу разделить только там, где есть 2 или более пробелов. Я пробовал несколько вещей, и я продолжаю получать один и тот же вывод, который заключается в том, что он разбивается после каждой буквы. Вот последнее, что я попробовал

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

Ответы [ 5 ]

13 голосов
/ 30 июля 2010
@cellMessage = split(/ {2,}/, $message);
9 голосов
/ 30 июля 2010

Сохраняя синтаксис, который вы использовали в своем примере, я бы порекомендовал это:

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

потому что вы будете соответствовать любому символу пробела (табуляция, пробел и т. Д.). Проблема с вашим исходным кодом заключалась в том, что инструкция split ищет шаблон, а предоставленное вами регулярное выражение приводило к пустой строке //, которая разбивает $message на отдельные символы.

3 голосов
/ 30 июля 2010
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 голосов
/ 20 июня 2013

На самом деле вы можете сделать:

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

Он делает то же самое, что и "@cellMessage = split (/ {2,} /, $ message); "но выглядит немного чище для меня ИМО.

0 голосов
/ 30 июля 2010

Попробуйте это: \b(\s{2,})\b

Это должно дать вам что-нибудь с несколькими пробелами между границами слов.

...