我正在尝试在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;}
我也尝试在\
前加_
,但这没有帮助。
答案 0 :(得分: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*$