如何删除string中的括号内的文本,同时仍然保留其他文本?

my $book = Spreadsheet::Read->new(); my $book = ReadData ('D:\Profiles\jmahroof\Desktop\Scheduled_Build_Overview.xls'); my $cell = "CD7"; my $n = "1"; my $send = $book->[$n]{$cell}; $send =~ s/\(/ /g; $send =~ s/\)//g; 

我有上面的代码,从Excel文件中获取数据,然后从指定的单元格中挑选文本,并从string中删除括号。 我需要能够删除方括号内的所有内容,包括括号本身,而留下文本的其余部分。 string的格式如下所示: text(text)

 $send =~ s/\(.*?\)//; 

解释:

s/search\转义下一个括号,因为它将被视为代码的一部分,如果不逃脱。 (.*?\)在这里,我们说我们正在寻找一个我们使用非贪婪。*? 再次匹配最后一个括号,最后一个括号被\转义/开始searchreplacefunction/结束search和replace。

所以我们search(*),然后换成什么都没有。

解释非贪婪vs贪婪。

*贪婪会匹配到最后)find

所以,如果我们有string((substring)end) then s/(.*)//将从第一个(到最后一个)离开你留下string

非贪婪不会,它会从第一个(到第一个)离开你stringend)所以它会是懒惰的,只有匹配你所要求的从(到)哪里贪婪会匹配抓住一切,即使你有(string)(())((strings))()()strings)strings)

如果你没有嵌套括号,这个单一的replace可以做到这一点:

 $send =~ s/\(.*?\)//; 

如果这些括号总是文本中的最后一项,则可以进一步简化为:

 $send =~s/\(.*//;