如何将一组字母映射到perl中的另一组字母?

时间:2014-02-14 02:46:55

标签: regex perl

我有像

这样的dna字符串
tcatttcaaatcatctggaccaaaagagtcaggaagtaactcttctatcgttttcatatcataacccccgt
cgtcatgaaacatataaacatttatatccttcgaaaattcacgaattacttgacgacaaataccacagggc
gtaactcttcccttggcactcatcactccaatagccataaatttagtgtaacccatgctcactgcttttgt
aattgctactcgttcggcacagatgcaattgccatatgatgcgttttcaacattagctccataaatatatg
tatttttatcgtcggatactacgcatgcacctactgcgaagttggagtagggacaatatgaatattgtaaa
ctctcttttacttcttgaaataacttctcaatatcttctttttccat

(除了一个没有休息的长强)

现在我要将所有a替换为t,将t替换为a,将c替换为ggc如何使用正则表达式?

3 个答案:

答案 0 :(得分:2)

您可以使用子程序:

sub complement {

    my ($seq) = @_;

    $seq =~ tr/ACGTacgt/TGCAtgca/;

    return $seq;
}

并称之为:

my $complemented_string = complement($string);

答案 1 :(得分:2)

您应尽可能明确地提出问题。要求使用正则表达式的解决方案误导所有人。

从Perl 5的第14版开始,您可以在/r上使用tr///修饰符返回修改后的字符串,而不是在原地更改值。如果你想保留原始和倒置的DNA序列,它可能是最好的解决方案。

这个简短的程序显示了一个例子。请注意,tr/// doe 使用正则表达式。

use strict;
use warnings;
use 5.014;

my $seq = 'tcatttcaaatcatctggaccaaaagagtcaggaagt';
my $inv = $seq =~ tr/atcg/tagc/r;

say $seq;
say $inv;

<强>输出

tcatttcaaatcatctggaccaaaagagtcaggaagt
agtaaagtttagtagacctggttttctcagtccttca

答案 2 :(得分:0)

直接使用shell命令tr,如果您想尝试。

tr "atcg" "tagc" < file