Perl以不同方式替换每个事件

时间:2012-08-02 15:01:09

标签: regex perl

在perl脚本中,我需要替换几个字符串。目前,我使用:

$fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/\>$1/g;

目的是在FASTA文件中格式化每个序列名称。它适用于我的情况,所以我不需要触摸这部分。但是,序列名称会在文件中多次出现。我最后不得两次 - 或更多 - 相同的序列名称。因此,我需要举例:

seqName1
seqName2
etc.

(而不是seqName,seqName等)

这是否有可能以某种方式自动处理每个事件?我不知道有多少序列,如果有相似的名称,等等。一个想法是在每次出现时连接一个随机字符串,因此我的问题。

非常感谢。


John完美地解决了这个问题,并且chepner帮助了解避免冲突的聪明主意,这是最终的结果:

$fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/
    sub {
        return '>'.$1.$i++;
    }->();
/eg;

非常感谢。

1 个答案:

答案 0 :(得分:4)

前几天我实际上是想做这样的事情,这就是我想出来的事情

$fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/

    sub {

        # return random string

    }->();

/eg;

\e修饰符将替换解释为代码,而不是文本。我使用匿名代码ref,以便我可以随时返回。