正则表达式获取一行中的数字
Regular expression to get a number on a line
我必须向 Perl 添加一些简单的行,但我不完全了解正则表达式以及如何使用它。
我 运行 一个文件并从那里获取输入:
open myFile, "csh ........
我通过执行“print
”运行 遍历文件输出的行,我看到其中一行是:
TaskID: 1000
(那里有很多空间)。
我想要做的,只是确定行以 TaskID:
开头的情况,然后将数字放入变量中。
为了识别以TaskID
开头的行,我做了:
if (/TaskID:/) {
我的问题:
- if 条件有效,它确实找到了以
TaskID
开头的行。但这是正确的做法,还是有更好的方法?
- 我不知道如何将这一行中的数字放入变量中。
我试过类似的方法:
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 <>;
我必须向 Perl 添加一些简单的行,但我不完全了解正则表达式以及如何使用它。 我 运行 一个文件并从那里获取输入:
open myFile, "csh ........
我通过执行“print
”运行 遍历文件输出的行,我看到其中一行是:
TaskID: 1000
(那里有很多空间)。
我想要做的,只是确定行以 TaskID:
开头的情况,然后将数字放入变量中。
为了识别以TaskID
开头的行,我做了:
if (/TaskID:/) {
我的问题:
- if 条件有效,它确实找到了以
TaskID
开头的行。但这是正确的做法,还是有更好的方法? - 我不知道如何将这一行中的数字放入变量中。
我试过类似的方法:
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 <>;