0

私は次の文字列を持っています:SL2.40ch12:53884872-53885197

SL2.40ch12、に$chromosome53884872に割り当てたいと$start思い53885197ます$end。これを行うために正規表現を使用する効率的な方法は何ですか?

これが私がそれをやろうとした方法ですが、私の正規表現はオフになっています。

my $string = SL2.40ch12:53884872-53885197
my $chromosome =~ /^*\:$/
my $start =~ /^+d\-$/
my $end =~ /^-+d\/

ありがとう

4

3 に答える 3

2

その特定の文字列に対して、次のような簡単なことを行うことができます。

my $string = "SL2.40ch12:53884872-53885197";
my ($chr, $start, $end) = split /[:-]/, $string, 3; 

もう少し厳密にしたい場合は、別々に実行してください

my ($chr, $range) = split /:/, $string, 2;
my ($start, $end) = split /-/, $range;

もちろん、これは、データの他の場所にコロンやダッシュが表示されないことを前提としています。

于 2013-03-20T16:52:25.023 に答える
1

これは、あなたが望むことをするかもしれない正規表現です:

($chromosome, $begin, $end) = /^(.*):(.*)-(.*)$/;
于 2013-03-20T16:35:23.707 に答える
0

私は Perl にあまり詳しくありませんが、一般的な正規表現構文を使用している場合、 $start および $chromosome 行に誤りがあります。'$' - 行末を意味します。そのため、行末のダッシュを見つけようとします。

于 2013-03-20T16:34:38.067 に答える