如何使用正则表达式从文件中读取信息并打印出来?

时间:2009-06-22 23:25:27

标签: regex perl

我正在使用以下数据:

__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__

3 个答案:

答案 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

之间没有空格