Regex 无法在Perl中匹配|之间的字符串
我从一个fasta文件中读取了一个文本,我正在尝试用Perl读取登录号。但我没有得到一个输出。代码如下:Regex 无法在Perl中匹配|之间的字符串,regex,perl,Regex,Perl,我从一个fasta文件中读取了一个文本,我正在尝试用Perl读取登录号。但我没有得到一个输出。代码如下: use strict; use warnings; sub main { my $file = "PXXXXX.fasta"; if(!open(FASTA, $file)) { die "Could not find $file\n"; } my $myLine = <FASTA>; my $pat = "|";
use strict;
use warnings;
sub main {
my $file = "PXXXXX.fasta";
if(!open(FASTA, $file)) {
die "Could not find $file\n";
}
my $myLine = <FASTA>;
my $pat = "|";
my @Num = $myLine =~ /$pat(.*?)$pat/;
print($Num[0]);
close(FASTA);
}
main();
使用严格;
使用警告;
副总管{
my$file=“pxxx.fasta”;
如果(!打开(FASTA$file)){
die“找不到$file\n”;
}
我的$myLine=;
我的$pat=“|””;
我的@Num=$myLine=~/$pat(.*)$pat/;
打印($Num[0]);
关闭(FASTA);
}
main();
FASTA文件句柄的内容是:
sp | P27455 | MOMP | U CHLPN主要外膜孔蛋白OS=肺炎衣原体OX=83558 GN=ompA PE=2 SV=1
MKKLLKSALLSAAFAGSVGSLQALPVGNPSDPSLLIDGTIWEGAGDPCATWCDAIS
LRAGFYGDYVFDRILKVDAPKTFSMGAKPTGSAANYTTAVDRPNAPYNKHLHAEWFTN
AGFIALNIWDRFVFCTLGASNGYIGNSTAFNLVGGLFGVGTTVNANELPNVSLSNGVV
ELYTDTSFSWSVGARGALWECGCATLGAEFQYAQSKPKVEELNVICNVSQFSVNKPKGYK
GVAFPLPtdagvatatgTksatinyHewqvGaslSyrlnSlvPygvqWsRatfdAdnir
IAQPKLPATVLNLTAWNPSLGNATALSTTDSFSDFMQIVSCQINKFKSRKACGVTVGAT
LVDADKWSLTAARLINERAAHVSGQFRF
任何关于如何修复返回代码的线索:P27455?管道
|
在正则表达式中具有特殊意义。你需要逃避它。最简单的方法是使用\Q
和\E
$myLine =~ /\Q$pat\E(.*?)\Q$pat\E/;
或者你也可以用这个
您也可以不使用正则表达式搜索,而只使用行。如果您总是想要第二列,这也可以
my (undef, $num) = split /\|/, $line;
管道
|
在正则表达式中具有特殊含义。你需要逃避它。最简单的方法是使用\Q
和\E
$myLine =~ /\Q$pat\E(.*?)\Q$pat\E/;
或者你也可以用这个
您也可以不使用正则表达式搜索,而只使用行。如果您总是想要第二列,这也可以
my (undef, $num) = split /\|/, $line;
看起来您正在尝试拆分
|
字符上的行,因此请使用拆分函数
my @Num = split /\|/, $myLine;
这将在
|
上拆分$myLine。请注意,您可能必须更改@Num
上的索引才能从中获取正确的项。看起来您正在尝试拆分|
字符上的行,因此请使用拆分功能
my @Num = split /\|/, $myLine;
这将在
|
上拆分$myLine。请注意,您可能必须更改@Num
上的索引才能从中获得正确的项。您可以在代码中改进一些内容,例如使用三个参数open
和词法文件句柄。两者都使代码更加安全<代码>打开我的$fh,'谢谢你的提示@simbabquemy($match)=$str=~m/\\\\\\\\\;([^\\\\\]*)\\\\\\/g;在代码中有一些地方可以改进,例如使用三个参数open
和词法文件句柄。两者都使代码更加安全<代码>打开我的$fh,'谢谢你的提示@simbabquemy($match)=$str=~m/\\\\\\\\\;([^\\\\\]*)\\\\\\/g;