我正在使用以下数据:
__DATA__
Branch 1: 10..11
13 E 0.496 -> Q 0.724
18 S 0.507 -> R 0.513
19 N 0.485 -> S 0.681
Branch 2: 11..12
81 R 0.891 -> Q 0.639
88 Y 0.987 -> S 0.836
从上面的数据中,我想读取一个字符前的数字,然后将它们打印出来。例如,在 Branch 1 中,我想阅读 13 , 18 , 19 和分支2 ,我想阅读 81 88 。
我已经编写了以下用于阅读分支1的代码,但它似乎不起作用。有什么建议吗?
#!/usr/bin/perl
use strict;
use warnings;
my $find = 'Branch 1:';
$a = '0';
open (FILE, "/user/Desktop/file") || die "can't open file \n";
while (my $body = <FILE>) {
if ($body =~ m/$find/) {
my $value = my $body=~ m/\d{2}\s[A-Z]/;
print "$value \n";
}
else {
$a++; # only to check it reading anything
print "$a \n";
}
}
__END__
答案 0 :(得分:3)
以下似乎可以做你想做的事:
#!/usr/bin/perl
use strict;
use warnings;
while ( <DATA> ) {
if ( /^(Branch [0-9]+): / or /^\s+([0-9]+) [A-Z]/ ) {
print "$1\n";
}
}
__DATA__
Branch 1: 10..11
13 E 0.496 -> Q 0.724
18 S 0.507 -> R 0.513
19 N 0.485 -> S 0.681
Branch 2: 11..12
81 R 0.891 -> Q 0.639
88 Y 0.987 -> S 0.836
答案 1 :(得分:2)
m/\d{2}\s[A-Z]0/
应该是
m/\d{2}\s[A-Z]/
或可能
m/\d{2}\s[A-Z]\s0/
甚至
m/\d{2}\s[A-Z]\s\d/
关键是你的代码在字母后面紧跟0
,但中间有一个空格。
答案 2 :(得分:0)
有一点是你的[A-Z]和0
之间没有空格