0

このパターンの文字列が配列にいくつかあります。

Aaaaa
Bbbbb (Ccccc)
Ddddd
Eeeee
Fffff (Ggggg)

次のような新しい配列を作成したいと思います。

Aaaaa
Bbbbb
Ddddd
Eeeee
Fffff

括弧のあるパターンを次のPerl正規表現と一致させることができます。

$string =~ /(.*?)(\(.*?\))/;
push(@newarray, $1);

しかし、それは、括弧内のテキストがないこれらの文字列では機能しません。オプションの括弧に一致するように他のいくつかを試しましたが、どれも機能していないようです:

$string =~ /(.*?)(?:\(.*?\))/;
$string =~ /(.*?)(\(.*?\))?/;
$string =~ /(.*?)(?:\(.*?\))?/;

誰か助けていただければ幸いです。ありがとうございました!

4

2 に答える 2

3

あなたが探しているパターンは次のとおりです。

/^(.*?)(?: \(.*\))?\z/

を追加すると、最後の2つが機能します\z。問題は、.*?ゼロ文字とうまく一致していることです。


ソリューション:

my @b = @a;
s/ \(.*\)// for @b;

また

use List::MoreUtils qw( apply );
my @b = apply { s/ \(.*\)// } @a;

または(5.14+)

my @b = map s/ \(.*\)//r, @a;
于 2013-03-02T16:56:08.870 に答える
0

最初の文字列にスペースが含まれていない場合は、次のように記述できます。

my @newarray = map /^(\S+)/, @array;

スペースが含まれている可能性がある場合は、

my @newarray = map /^([^(]*[^\s(])/, @array;
于 2013-03-02T19:43:19.890 に答える