Perl:删除数组中字符串的一部分

时间:2014-01-10 08:10:27

标签: regex arrays perl substring substr

我阅读了所有类似的问题,而不是回答问题。

我看到了很多“删除或添加”,但没有“移动到另一个阵列......”

这个问题低于你们所有人,但我是Perl Newblet,可以使用优雅的解决方案帮助。

我有一个包含未知元素的数组,每个元素都包含一个类似于{img_names_will_change.jpg}some unknown text的字符串。

我需要一个子程序,它将从每个元素中去除{yadayada.jpg}并将yadayada.jpg部分添加到第二个数组。

但是,我仍然需要原始数组中的每个元素都能生存,但没有{....}

我研究过使用substr或regex但是在语法上迷失了。

我也将在正则表达式上进行RTFM。

2 个答案:

答案 0 :(得分: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并将其推送到另一个数组中。

答案 1 :(得分: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;

}
}