2010-10-25 201 views
2

我试图从一个字符串在Perl中删除特定的字符:如何从Perl中的字符串中删除特定的字符?

my $string="MATTHATBAT"; 
substr($string, 2, 1, ''); 

编辑:这不工作,对不起。如果有人需要知道如何做到这一点,请留下此处。

此外,有没有一个更有效的方式来做到这一点?

该字符串现在应该是MATHATBAT。

我错过了什么吗?我知道我可以使用正则表达式///,但是我遍历字符串,查找某个字符(此字符发生更改),然后删除字符(但只是该字符在该偏移量处)。所以最终,我将删除第二个或第三个字符(即MATTHABAT,MATTHATBA,甚至MATHABAT等)

我可以使用搜索和替换来做到这一点吗?我正在使用for循环遍历偏移量。

+0

它适用于我 – 2010-10-25 10:44:08

+0

啊,是的,我看到它现在在一个新的脚本。我会解决这个问题,但有没有更好的方法来做到这一点?这种方式看起来并不高效。 – Bharat 2010-10-25 10:50:08

+0

问题仍然不清楚 - 什么决定了要删除的角色?这是重复的?你想删除该字符的后续实例,但不是删除第一个字符之前的任何实例吗? – plusplus 2010-10-25 12:53:06

回答

2

下面是一个基准相比较的regexp VS SUBSTR:

#!/usr/bin/perl 
use 5.10.1; 
use warnings; 
use strict; 
use Benchmark qw(:all); 

my $count = -3; 
my $r = cmpthese($count, 
    { 
    'substring' => sub { 
     my $string = "MATTHATBAT"; 
     substr($string, 2, 1, ''); 
    }, 
    'regexp' => sub { 
     my $string = "MATTHATBAT"; 
     $string =~ s/(.{2})./$1/; 
    }, 
    } 
); 

结果:

   Rate regexp substring 
regexp  162340/s  --  -93% 
substring 2206122/s  1259%  -- 

正如你所看到的,SUBSTR约13.5倍的速度正则表达式。

@SinanÜnür1259%是13.5倍,而不是12.5倍。

+0

这让人大开眼界。我想这样写起来更容易,不会让它更容易运行或更快:)谢谢! – Bharat 2010-10-25 12:32:12

1

你的例子确实有效。 $string将包含您想要的MATHATBAT,问题在其他地方,而不是在这一部分。

+0

谢谢,我现在看到它。我会挖掘错误:)有没有更好的方式做到这一点,你知道吗?再次感谢! – Bharat 2010-10-25 10:51:04

0

您可以循环的reg.exp以// g^

perlrequick匹配:

$x = "cat dog house"; # 3 words 
    while ($x =~ /(\w+)/g) { 
     print "Word is $1, ends at position ", pos $x, "\n"; 
    } 

认为你可以修改$ X,而迭代..或者你可以存储POS $ X在阵列和除去之后再

相关问题