我有以下字符串:SL2.40ch12:53884872-53885197
。
我想将SL2.40ch12
分配给$chromosome
,将53884872
分配给$start
,将53885197
分配给$end
。使用正则表达式执行此操作的有效方法是什么?
这是我尝试的方法,但我的正则表达式已关闭。
my $string = SL2.40ch12:53884872-53885197
my $chromosome =~ /^*\:$/
my $start =~ /^+d\-$/
my $end =~ /^-+d\/
感谢
答案 0 :(得分: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;
当然,这是假设您的数据中不会出现冒号或破折号。
答案 1 :(得分:1)
这是一个可以做你想做的正则表达式:
($chromosome, $begin, $end) = /^(.*):(.*)-(.*)$/;
答案 2 :(得分:0)
我对Perl并不熟悉,但是如果它使用常见的正则表达式语法而不是你的$ start和$染色体行有错误。 '$' - 意味着终结。所以它会尝试在行尾找到破折号。