正则表达式获取一行中的数字

Regular expression to get a number on a line

我必须向 Perl 添加一些简单的行,但我不完全了解正则表达式以及如何使用它。 我 运行 一个文件并从那里获取输入:

open myFile, "csh ........

我通过执行“print”运行 遍历文件输出的行,我看到其中一行是:

TaskID:             1000

(那里有很多空间)。 我想要做的,只是确定行以 TaskID: 开头的情况,然后将数字放入变量中。

为了识别以TaskID开头的行,我做了:

if (/TaskID:/) {

我的问题:

  1. if 条件有效,它确实找到了以 TaskID 开头的行。但这是正确的做法,还是有更好的方法?
  2. 我不知道如何将这一行中的数字放入变量中。

我试过类似的方法:

my $mytask = ;

但是,它不明白。 你能帮我了解一下如何获取号码吗?

您可以使用 \s+ 来匹配多个空格,并使用 (\d+) 来匹配和捕获数字。参考perldoc perlre。这是一个独立的例子:

use warnings;
use strict;

while (<DATA>) {
    if (/^TaskID:\s+(\d+)/) {
        my $task = ;
        print "$task\n";
    }
}

__DATA__
TaskID:             1000
stuff
TaskID:             700
junk

这会打印:

1000
700

</code> 包含与第一个捕获 (<code>(...)) 匹配的文本。您的模式没有捕获,因此不会设置 </code>。固定:</p> <pre><code>if (/^TaskID:\s*(\d+)/) { my $task_id = ; ... }

但我喜欢避免使用 </code>。</p> <pre><code>if ( my ($task_id) = /^TaskID:\s*(\d+)/ ) { ... }

嗯,这是一个简单的过滤任务,可以用下面的代码解决

注意:运行 为 ./script.pl data_file

  • while 在文件上创建一个循环
  • <> 从作为参数提供给脚本的文件中读取
  • 正则表达式选择感兴趣的一块
  • say 将捕获的数据打印到屏幕上
use strict;
use warnings;
use feature 'say';

/^TaskID:\s+(\d+)/ && say  while <>;