2014-01-10 75 views
0

我閱讀了所有類似的問題,並沒有收集到答案。Perl:刪除數組中的一部分字符串

我看到了很多的「刪除此或添加」而不是「移動到另一個陣列......」

這個問題是下面所有的你,但我是一個Perl Newblet和真的可以使用的優雅的解決方案

我有一個未知元素數組,每個元素包含一個類似於{img_names_will_change.jpg}some unknown text的字符串。

我需要一個子程序,將從每個元素中去掉{yadayada.jpg},並將yadayada.jpg部分添加到第二個數組中。

但是,我仍然需要原始數組中的每個元素才能存活,但沒有{....}

我看着使用substr或正則表達式,但在語法中迷路了。

我也會在正則表達式上使用RTFM。

+0

下面的解決方案適用於所有,但不會從原始數組的每個元素中刪除「{img.jpg}」子字符串。無論如何要做到這一點呢? – user2875251

回答

0

我明白了。只需將其餘的字符串加入$2並將其應用於$original。謝謝Paulchenkiller!

foreach my $orignal (@original) { 

#Extracts the text from within "{}" and pushes it into @images  
if ($original =~ m/{(\w+\.\w+)}(.*)/) { 

push @images, $1; 

#Strips "{..}" out of @original 
$original = $2; 

} 
} 
0

如果我得到你的權利,這可能是一個解決方案:

my @names = (
    '{img_names_will_change.jpg}some unknown text', 
    '{img_names_will_change.jpg}some unknown text', 
    '{img_names_will_change.jpg}some unknown text' 
); 
my @extract; 
foreach my $name (@names) { 
    if ($name =~ m/{(\w+\.\w+)}/) { 
    push @extract, $1; 
    } 
} 

use Data::Dumper; 
print Dumper @extract; 

輸出

$VAR1 = 'img_names_will_change.jpg'; 
$VAR2 = 'img_names_will_change.jpg'; 
$VAR3 = 'img_names_will_change.jpg'; 

{(\w+\.\w+)}提取的Imagename並將其推入另一個數組。

+0

看起來像它可能工作,但爲什麼你不只是做「foreach(@names){if($ name =〜.....」爲什麼創建一個$ name變量?此外,這是否剝離「{。 ..}「@names數組元素?真棒工作順便說一句,我們可以給予積分,謝謝??? – user2875251

+0

我的意思是」if($ _ =〜...「 – user2875251

+0

左側有一個箭頭upvotes/downvotes和一個「接受這個答案」,如果你是OP。 回到你的答案:它建議給循環內部的變量名稱,這是例如,如果你有兩個循環,你不能肯定地說,'$ _'被使用。它的可讀性更高。 – 2014-01-10 09:17:09

相關問題