В Perl, как я могу получить поля в этой строке CSV в массив без пробелов? - PullRequest
2 голосов
/ 11 ноября 2009

если у меня есть строка, скажите:

my $string = "A, B,C, D , E ";

Как я могу поместить это в массив в Perl без начальных и конечных пробелов? Так что я хочу только одну букву в каждом элементе массива. То, что я сейчас делаю, это:

my @groups = split /,\s*/, $string;

Но этого явно недостаточно, так как пробелы остаются. Любая помощь приветствуется. Большое спасибо !!

Ответы [ 5 ]

7 голосов
/ 11 ноября 2009

Затем уберите начальные / конечные пробелы перед разбиением и сопоставьте начальные / конечные пробелы в выражении разделения.

my $string = " A, B,C, D , E ";
$string =~ s/^\s+//;
$string =~ s/\s+$//;
my @groups = split /\s*,\s*/, $string;

Использование такого модуля, как Text :: CSV , вероятно, лучше, чем попытка выполнить собственный анализ CSV.

5 голосов
/ 11 ноября 2009
my @groups = map { s!^\s+!!; s!\s+$!!; $_ } split /,/, $string;

или

my @groups = $string =~ /([A-Z])/g;

Однако, если ввод действительно не такой простой, как вы показали, было бы лучше использовать Text :: CSV или Text :: xSV .

2 голосов
/ 12 ноября 2009

Вам не нужно ограничивать себя split, вы просто используете совпадение с модификатором /g.

my $string = " A, B,C, D , E ";
my @groups = $string =~ /\s*([^,]+?)\s*,?/g;
2 голосов
/ 11 ноября 2009

Вот, пожалуйста:

@groups = split /,/, $string;
#remove whitespace now.
@groups = map { s/^\s+//; s/\s+$//; $_ } @groups;

Примечание: регулярное выражение можно упростить, я почти уверен, просто еще не сработало.

1 голос
/ 12 ноября 2009

Просто чтобы убедиться, что я что-то не пропустил, после попытки демистифицировать ваши примеры я придумал следующее:

my $string = " A, B,C, D , E ";
$string =~ s/\s+//g;
my @groups = split /,/, $string;

Будет работать, я думаю?

...