2010-10-25 204 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在陣列和除去之後再

相關問題