[英]extracting substring with regex in perl
我有一个简单的问题(我认为)从 Perl 的档案中提取信息。 这个档案大约有 200 000 行,有些行有这种格式
WO GB111MTD1 dddD-51 TIME 141202 0105 PAGE 1
我想输入一个变量GB111MTD1
,我知道“WO”这个词总是排在第一位。
我尝试过的是以下内容:
open(archive, "C:/Users/g/Desktop/c/alarms.log") or die "blah\n";
while(< archive>){
if($_ =~ /^WO\s+(.*)/){
print "Found: $1\n";
last;
}
}
这打印了我所有的行,但我只想要“GB111MTD1”。
---下一个意图
while(< archive>){
if($_ =~ /^WO\s+(.*)\S/){
print "Found: $1\n";
last;
}
}
我想在这里说“如果该行以 WO 开头并且有一些空格,请匹配我接下来的内容,直到找到其他空格”
在这里,唯一的区别是 WO GB111MTD1 dddD-51 TIME 141202 0105 PAGE 1 的“1”没有显示,但仍然不是我想要的
我希望你明白我的问题。
您可以将\\S
用于非空白字符:
use warnings;
use strict;
while (<DATA>) {
if (/^WO\s+(\S+)/) {
print "Found: $1\n";
last;
}
}
__DATA__
WO GB111MTD1 dddD-51 TIME 141202 0105 PAGE 1
印刷:
Found: GB111MTD1
我会在以 WO 开头的行上使用 split。
use warnings;
use strict;
while (<DATA>) {
if (/^WO\s/) {
my @fields = split(/\s+/);
my $myvar = $fields[1];
# do stuff with $myvar
say "Frobnicating order # $myvar";
}
}
__DATA__
WO GB111MTD1 dddD-51 TIME 141202 0105 PAGE 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.