Regex 正则表达式可选匹配

Regex 正则表达式可选匹配,regex,perl,Regex,Perl,我在数组中有几个字符串是这种模式的: Aaaaa Bbbbb (Ccccc) Ddddd Eeeee Fffff (Ggggg) 我想制作一个新的数组,如下所示: Aaaaa Bbbbb Ddddd Eeeee Fffff 我能够将带有括号的模式与以下Perl正则表达式匹配: $string =~ /(.*?)(\(.*?\))/; push(@newarray, $1); 但是,如果没有论文中的文本,这些字符串将不起作用。我尝试了其他一些方法来匹配可选的偏执论题,但似乎都不起作用: $s

我在数组中有几个字符串是这种模式的:

Aaaaa
Bbbbb (Ccccc)
Ddddd
Eeeee
Fffff (Ggggg)
我想制作一个新的数组,如下所示:

Aaaaa
Bbbbb
Ddddd
Eeeee
Fffff
我能够将带有括号的模式与以下Perl正则表达式匹配:

$string =~ /(.*?)(\(.*?\))/;
push(@newarray, $1);
但是,如果没有论文中的文本,这些字符串将不起作用。我尝试了其他一些方法来匹配可选的偏执论题,但似乎都不起作用:

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

如果有人能帮忙,我将不胜感激。谢谢大家!

您正在寻找的模式是:

/^(.*?)(?: \(.*\))?\z/
如果您添加
\z
,您的最后两个将起作用。问题是
*?
很高兴匹配零个字符


解决方案:

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

或(5.14+)


您正在寻找的模式是:

/^(.*?)(?: \(.*\))?\z/
如果您添加
\z
,您的最后两个将起作用。问题是
*?
很高兴匹配零个字符


解决方案:

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

或(5.14+)


如果初始字符串中没有空格,则可以只写

my @newarray = map /^(\S+)/, @array;
如果它可能包含空格,则

my @newarray = map /^([^(]*[^\s(])/, @array;

如果初始字符串中没有空格,则可以只写

my @newarray = map /^(\S+)/, @array;
如果它可能包含空格,则

my @newarray = map /^([^(]*[^\s(])/, @array;