2

文字列がある場合は、次のように言います。

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

これをPerlの先頭と末尾のスペースなしで配列に入れるにはどうすればよいですか?だから私が欲しいのは、各配列要素の1文字だけです。私が現在していることはこれです:

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

しかし、これは明らかに十分ではありません。後続のスペースがまだそこにあるからです。助けていただければ幸いです。どうもありがとう !!

4

5 に答える 5

7

次に、分割する前に先頭/末尾のスペースを削除し、split式の先頭/末尾のスペースを一致させます。

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

ただし、 Text :: CSVのようなモジュールを使用する方が、独自のCSV解析を実行するよりもおそらく優れています。

于 2009-11-11T20:51:35.683 に答える
5
my @groups = map { s!^\s+!!; s!\s+$!!; $_ } split /,/, $string;

また

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

ただし、入力が実際に示したほど単純でない限り、Text::CSVまたはText::xSVを使用することをお勧めします。

于 2009-11-11T20:54:19.280 に答える
2

どうぞ:

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

注:正規表現は単純化できますが、まだ解決していないと確信しています。

于 2009-11-11T20:53:16.510 に答える
2

に制限する必要はありません。修飾子splitとの一致を使用するだけです。/g

my $string = " A, B,C, D , E ";
my @groups = $string =~ /\s*([^,]+?)\s*,?/g;
于 2009-11-11T21:16:20.677 に答える
1

私が何かを見逃していないことを確認するために、あなたの例をわかりやすく説明しようとした後、私はこれを思いついた:

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

私が推測するどちらかで動作しますか?

于 2009-11-11T21:09:05.310 に答える