在价值"得分"之后,我试图在perl中打印一定数量的数字。在最后一个号码之前

时间:2015-08-04 20:40:09

标签: regex perl

my $find = "score";

open (TEST, "lines.txt");

my @line = <TEST>;

for (@line) {

    if ($_ =~ /$find/) {
        print split ( /score/, $_);
    }
}

close (TEST);

打印出来:

  

100000000 100

     

100000001 100

     

100000002 100

但我只希望第一个值不是&#34; 100&#34;

3 个答案:

答案 0 :(得分:0)

来自perldoc split

  

将字符串EXPR拆分为字符串列表并返回列表   列表上下文,或标量上下文中列表的大小。

split ( /score/, $_);返回您打印的字符串列表。鉴于您的输出,我假设您的输入文件行如下所示:

100000000 score100

如果您只想要第一个值,那么您应该从分割中捕获该结果并仅打印该结果。您可以使用undef忽略您不想捕获的值:

my ($value, undef) = split /score/; # split works on $_ by default
print $value;

另一种方法是不使用正则表达式捕获组对每行进行拆分和替代模式匹配:

if (my ($value) =~ /(\w+) $find/) {
    print $value;
}

答案 1 :(得分:0)

if ($_ =~ /$find\s*(\d+)/) {
        print "$1\n";
}

答案 2 :(得分:0)

您对拆分的使用是错误的。

虽然这不是最好的方法,但我会纠正你自己的代码,而不是建议更好的方法:

my $find = "score";

open (TEST, "lines.txt");

my @line = <TEST>;

for (@line) {

    if ($_ =~ /($find)(\s+)(\d+)(\s+)(\d+)/) {
        print $3; $1 will be Score. $2 will be space. $3 will be your value etc.
    }
}

close (TEST);