我似乎无法在Perl中获取正则表达式来识别下划线(_)字符

时间:2013-08-10 02:02:21

标签: regex perl

我正在尝试在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;}

我也尝试在\前加_,但这没有帮助。

1 个答案:

答案 0 :(得分:0)

假设您使用xmi选项,我会做出以下更改:

^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*$