-1

我正在尝试在 Perl 中编写一系列正则表达式来从文件中提取某些类型的数据。出于某种原因,我似乎无法让 Perl 匹配其中包含下划线 ( _) 的任何数据行。

如果我想获得以

"Ch2    Flybase exon    "

或者

"Ch3    Flybase exon    "

(空格是制表符),下面的代码效果很好:

if ($_ =~ m/^Ch[ 2-3]   Flybase exon    /) {print outputFile;}

但是,如果我想匹配具有更复杂染色体名称的行(即不仅仅是字母 'Ch' 后跟一个数字),例如:

Ch4_group1
Ch4_group2
Ch4_group3
Ch4_group4
Ch4_group5
ChXL_group1a
ChXL_group1e
ChXL_group3a
ChXL_group3b
ChXR_group3a
ChXR_group5
ChXR_group6
ChXR_group8
Unknown_group_1
Unknown_group_10
Unknown_group_100
Unknown_group_101

我尝试了以下代码但没有成功:

if ($_ =~ m/^Ch4_group[1-5] Flybase exon    /) {print outputFile;}
if ($_ =~ m/^ChX._group[0-9]+[a-z]* Flybase exon    /) {print outputFile;}
if ($_ =~ m/^Unknown_group_[0-9]+   Flybase exon    /) {print outputFile;}
if ($_ =~ m/^Unknown_singleton_[0-9]+   Flybase exon    /) {print outputFile;}

我也尝试过\在 . 前面包含一个_,但这没有帮助。

4

1 回答 1

0

假设您使用x, m,i选项,我将进行以下更改:

^Ch4_group[1-5] Flybase exon
将会:
^Ch4_group[1-5]\s*Flybase\sexon\s*$

^ChX._group[0-9]+[a-z]* Flybase exon
将会:
^ChX._group[0-9]+[a-z]*\s+Flybase\sexon\s*$

^Unknown_group_[0-9]+ Flybase exon
将会:
^Unknown_group_[0-9]+\s*Flybase\sexon\s*$

^Unknown_singleton_[0-9]+ Flybase exon
将会:
^Unknown_singleton_[0-9]+\s*Flybase\sexon\s*$

于 2013-08-10T15:05:08.260 回答