如何删除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/\(.*//;