如何在保留其他文本的同时删除字符串中括号内的文本?

How to remove text within brackets in a string while still keeping the other text?

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 文件中获取数据,然后从指定的单元格中挑选出文本并从字符串中删除括号。我需要能够删除括号内的所有内容,包括括号本身,同时保留其余文本。字符串的格式如下所示:text(text)

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

解释:

s/ 进行搜索 \ 转义下一个括号,因为如果不转义,它将被视为代码的一部分。 (.*?\) 在这里我们说我们正在搜索什么我们使用非贪婪。*?再次匹配到最后一个括号的任何内容,最后一个括号被 \ 转义 / 开始搜索的替换功能 / 结束搜索和替换。

所以我们搜索 (*) 然后什么都不替换。

解释非贪婪与贪婪。

.* 贪婪会匹配到最后一个 ) 找到

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

non greedy 不会,它会从第一个 ( 开始到第一个 ) 给你留下 stringend) 所以它是惰性的并且只匹配你要求的这是从 ( 到 ) 那里贪婪会匹配抓住一切,即使你有这个 (string)(())((strings))()()strings)strings)

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

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

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

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