1

行の空の文字列を削除する正規表現を作成しようとしています (リスト項目間の空白は気にしません)。たとえば、次のbaz foo, "","", bar, ""ようになります。baz foo, bar

これまでのところ、私は試しています

$newLine =~ s/""\s*?,//g;
$newLine =~ s/,\s*?""//g;

しかし、baz "", foo, ""それが戻ってきてbaz foo, ""いることを考えると、私はそれを返したいと思っていbaz fooます。

何が問題なのか、どうすれば修正できるのか、誰か説明してもらえますか?

ありがとう

4

2 に答える 2

1

あなたのコードは私のために働きます:

$string = 'baz "", foo, ""';
$string =~ s/""\s*?,//g;
$string =~ s/,\s*?""//g;
print "$string\n";

戻り値

baz  foo

私のため。

編集:以下の解説で述べたように、 string では機能しませんbaz "", ""。これは、最初の正規表現,が 2 番目の の前に権利を消費し""、2 番目の正規表現が一致しないためです。

正規表現の代わりに を使用することもできますmap

$string = 'baz "", "", foo';
$string = join(" ", map { $_ =~ s/\s*""\s*//g; $_; } (split(/\s*,\s*/, $string)));

それはに設定さ$stringれますbaz foo

于 2013-10-04T11:50:29.073 に答える