我有一个字符串,我需要用mod1
替换起始字符集。
就像xyz_gf_111_yz
到mod1_111_yz
一样。
bcd_df_222_xx
到mod2_222_xx
等等。
任何人都可以建议sol,因为起始字符串不是固定的,而且我是初学者在perl
谢谢!
答案 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