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

Regex Perl以不同的方式替换每个事件,regex,perl,Regex,Perl,在perl脚本中,我需要替换几个字符串。目前,我使用: $fasta =~ s/\>[^_]+_([^\/]+)[^\n]+/\>$1/g; 目的是在FASTA文件中格式化每个序列名。它在我的情况下工作得很好,所以我不需要碰这个部分。但是,序列名称在文件中出现了几次。最后,我不能有两次或更多次相同的序列名。因此,例如,我需要: seqName1 seqName2 etc. (代替seqName、seqName等) 这是否可能以某种方式自动以不同的方式处理每次事件?我不知道有多少个

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

$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
映射到它自己的序列。谢谢你,我考虑过冲突,但不太在意(就我而言)。解决它的方法很简单,因此我也实现了它。