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;