2017-04-07 222 views
1
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; 
print $send; 
+2

尝试转义元字符'(':'$ send =〜s/\(//g' –

+1

解决,谢谢 –

回答

1

括号被视为代码的一部分,只是逃避它。

$send =~ s/\(/ /; 
print $send; 
1

既然你只能更换一个字符用另一个,你不希望替换,但音译。这是tr/// function in Perl。由于该模式只是一个字符列表,而不是一个实际的正则表达式,所以您不需要转义左括号(。也没有/g标志。它只是取代所有的事件。

$send =~ tr/(/ /; 

的主要区别正则表达式替换的是,音译获得在编译时编译,而不是在运行时。这使得tr///s///更快,特别是在循环中。

查看full documentation in perlop

+0

好点,真的.. –

+0

这真的很有趣,他们得到编译时编译,我肯定会考虑使用这个;) –

+0

@JamalMahroof使它更难于在动态模式下使用它,这是一个痛苦,但这个用例正是它的用途。 – simbabque

相关问题