如何在保留其他文本的同时删除字符串中括号内的文本?
问题描述:
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/
进行搜索 \
逃脱那随之而来的是,如果没有逃过它会被看作是代码的一部分支架。 (.*?\)
这里我们说什么,我们正在寻找一个我们使用非贪婪。*?以匹配最后一个支架上的任何东西,最后一个支架被转移\
/
开始替换功能的搜索 /
结束搜索和替换。
所以我们搜索(*),然后替换为无。
解释非贪婪vs贪婪。
。*是贪婪的匹配,直到最后)
发现
因此,如果我们有string((substring)end)
then s/(.*)//
将从第一(
上去最后)
离开你string
非贪婪不会,它将与第一(
到第一)
开始离开你stringend)
所以这将是懒惰和只匹配你问什么,这是从(到),其中贪婪匹配抢的一切,即使你有这个(string)(())((strings))()()strings)strings)
答
如果你没有嵌套的括号,这单独置换可以做到这一点:
$send =~ s/\(.*?\)//;
如果这些括号是总是文本的最后一个项目,它可以进一步简化为:
$send =~s/\(.*//;
请问为什么这个组? – sidyll
固定。谢谢,打字太快了。 –
谢谢,它的作品!但是,能否请你解释一下,或者指给我一些我可以学会理解的地方? –