Regex Perl以不同的方式替换每个事件
在perl脚本中,我需要替换几个字符串。目前,我使用:Regex Perl以不同的方式替换每个事件,regex,perl,Regex,Perl,在perl脚本中,我需要替换几个字符串。目前,我使用: $fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/\>$1/g; 目的是在FASTA文件中格式化每个序列名。它在我的情况下工作得很好,所以我不需要碰这个部分。但是,序列名称在文件中出现了几次。最后,我不能有两次或更多次相同的序列名。因此,例如,我需要: seqName1 seqName2 etc. (代替seqName、seqName等) 这是否可能以某种方式自动以不同的方式处理每次事件?我不知道有多少个
$fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/\>$1/g;
目的是在FASTA文件中格式化每个序列名。它在我的情况下工作得很好,所以我不需要碰这个部分。但是,序列名称在文件中出现了几次。最后,我不能有两次或更多次相同的序列名。因此,例如,我需要:
seqName1
seqName2
etc.
(代替seqName、seqName等)
这是否可能以某种方式自动以不同的方式处理每次事件?我不知道有多少个序列,如果有相似的名称,等等。一个想法是在每次出现时连接一个随机字符串,因此我的问题
非常感谢
约翰完美地解决了这一问题,切普纳提出了避免冲突的明智想法,以下是最终结果:
$fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/
sub {
return '>'.$1.$i++;
}->();
/eg;
非常感谢。前几天我真的想做类似的事情,下面是我的想法
$fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/
sub {
# return random string
}->();
/eg;
\e
修饰符将替换解释为代码,而不是文本。我使用匿名代码ref,这样我就可以在任何时候返回 前几天我真的想做类似的事情,下面是我想到的
$fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/
sub {
# return random string
}->();
/eg;
\e
修饰符将替换解释为代码,而不是文本。我使用匿名代码ref,这样我就可以在任何时候返回 检查Perl是否允许您传入一个函数来处理替换。我尝试在正则表达式中添加rand(999)
,但没有成功。正则表达式中的文本被视为文本,而不是代码。请检查Perl是否允许您传入一个函数来处理替换。我尝试在正则表达式中添加rand(999)
,但没有成功。正则表达式中的文本被认为是文本,而不是代码。我不知道这个,非常感谢。我仍然需要保留序列名($1
)。你知道如何继续展示它吗?现在我只能用一个完整的随机字符串代替部分字符串。你仍然可以在子程序中使用$1
,而不是随机字符串(它可能会产生冲突),只需返回一个不断增加的数字:sub{$I++}
你还可以保留一个哈希,将每个$1
映射到它自己的序列。谢谢你,我考虑过冲突,但不太在意(就我而言)。解决这个问题的方法很简单,所以我也实现了。我不知道这个,非常感谢。我仍然需要保留序列名($1
)。你知道如何继续展示它吗?现在我只能用一个完整的随机字符串代替部分字符串。你仍然可以在子程序中使用$1
,而不是随机字符串(它可能会产生冲突),只需返回一个不断增加的数字:sub{$I++}
你还可以保留一个哈希,将每个$1
映射到它自己的序列。谢谢你,我考虑过冲突,但不太在意(就我而言)。解决它的方法很简单,因此我也实现了它。