替换字符串中的起始字符

时间:2014-01-07 23:16:34

标签: regex perl

我有一个字符串,我需要用mod1替换起始字符集。 就像xyz_gf_111_yzmod1_111_yz一样。          bcd_df_222_xxmod2_222_xx等等。

任何人都可以建议sol,因为起始字符串不是固定的,而且我是初学者在perl

谢谢!

4 个答案:

答案 0 :(得分:0)

以下内容可以帮助您入门:

my @strings = qw(xyz_gf_111_yz bcd_df_222_xx);

my $i = 0;
for my $str (@strings) {
    my $after = $str;
    $i++;
    $after =~ s/[^_]+/mod$i/;

    print "$str -> $after\n";
}

答案 1 :(得分:0)

     my @strings = qw(xyz_gf_111_yz bcd_df_222_xx asd_cv_333_dd); 
     my $i = 1;

     for my $str (@strings)
     {   
         my $after = $str;

         $after =~ s/^\w{3}[_]\w{2}/mod$i/;
         $i++;
         print "$str -> $after\n";
     }

答案 2 :(得分:0)

@Miller,

我建议使用不同的解决方案,假设您要替换起始子字符串(左侧第一个数字的所有字符),并且相关数字到“mod”字符串由数字子字符串的第一个数字给出以下可能是一种方式。

my @strings = qw(xyz_gf_111_yz bcd_df_222_xx asd_cv_333_dd); 

for my $str (@strings) {
    print "bfr:".$str."\n";
    $str =~ s/^([^\d]+?)_(\d)/mod$2_$2/;
    print "aft:".$str."\n";
}

答案 3 :(得分:0)

这是另一种选择:

use strict;
use warnings;

my $i;
my @strings = ( 'xyz_gf_111_yz', 'bcd_df_222_xx' );

for (@strings) {
    print $_, "\n" if s/.+?_[^_]+/'mod'.++$i/e;
}

输出:

mod1_111_yz
mod2_222_xx