如何使用正则表达式提取字符串

时间:2013-03-20 16:30:59

标签: regex string perl

我有以下字符串: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\/

感谢

3 个答案:

答案 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和$染色体行有错误。 '$' - 意味着终结。所以它会尝试在行尾找到破折号。