簡體   English   中英

在perl中使用正則表達式提取子字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM