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

问题描述:

我有以下字符串:SL2.40ch12:53884872-53885197如何使用正则表达式提取字符串

我想分配给SL2.40ch12$chromosome53884872$start53885197$end。使用正则表达式执行此操作的有效方法是什么?

下面是我如何尝试这样做,但我的正则表达式关闭。

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

感谢

对于特定的字符串,你可以做一些简单的像这样:

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

如果你想让它有点严格,分别做他们

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

这当然,假设你不会有冒号或短划线出现在你的数据的其他地方。

+0

太好了,谢谢。 – cooldood3490 2013-03-20 16:59:38

+0

不客气。 – TLP 2013-03-20 17:10:37

+2

'[: - ]'就像你的微笑:) – gaussblurinc 2013-03-20 17:17:45

我不是很熟悉Perl,但如果使用正则表达式常见的语法比你的$开始和$染色体行有一个错误。 '$' - 表示行结束。所以它会尝试在行尾找到破折号。

这里是一个可以做一个正则表达式,你想要什么:

($chromosome, $begin, $end) = /^(.*):(.*)-(.*)$/;