繁体   English   中英

Perl-在文本文件上使用正则表达式以获取数组中特定的字符串输入

[英]Perl - Using regex on a text file to get specific string input in an array

所以我试图学习如何在Perl中使用正则表达式。 我有一个包含信息的textfile.txt,并且我想访问该文本文件的特定部分。 textfile.txt包含以下条目(前3行):

Jan    2016-01-01 Friday   12:00
Feb    2016-02-01 Monday   23:45
Mar    2016-03-01 Tuesday  15:30

我想要做的是将月份“ Jan / feb / mar”的名称放入一个数组,将其数值“ 2016-01-01”放入另一个数组。 我当前的脚本将整个第一行放在同一元素中。 到目前为止,这是我写入数组的代码:

while (<FILE>) {
push (@newArray, $_);
}
close FILE

我该如何只将日期(2016-01-01)或月份名称(Jan / feb / mar)的条目从文件中放入数组,而不是将整行放入array元素中?

我不会使用regex ,而是拆分:

#!/usr/bin/perl

use warnings;
use strict;

use Data::Dumper; 

my @month_words;
my @month_dates;
my %month_lookup;

while ( <DATA> ) {
   my ( $mon, $date, $day, $time ) = split; 
   push ( @month_words, $mon );
   push ( @month_dates, $date ); 
   $month_lookup{$mon} = $date; 
}

print Dumper \@month_words, \@month_dates, \%month_lookup;

__DATA__
Jan    2016-01-01 Friday   12:00
Feb    2016-02-01 Monday   23:45
Mar    2016-03-01 Tuesday  15:30

这将打印两个数组以及哈希:

$VAR1 = [
          'Jan',
          'Feb',
          'Mar'
        ];
$VAR2 = [
          '2016-01-01',
          '2016-02-01',
          '2016-03-01'
        ];
$VAR3 = {
          'Mar' => '2016-03-01',
          'Feb' => '2016-02-01',
          'Jan' => '2016-01-01'
        };

创建捕获组()以从匹配的正则表达式中提取信息:

#!/usr/bin/perl
use warnings;
use strict;

my (@months, @dates);
while (<DATA>) {
    if (my ($month, $date) = /^(...) \s+ ([0-9-]+)/x) {
        push @months, $month;
        push @dates, $date;
    }
}
print "@months\n@dates\n";

__DATA__
Jan    2016-01-01 Friday   12:00
Feb    2016-02-01 Monday   23:45
Mar    2016-03-01 Tuesday  15:30

如果只想接受月份名称,则可以将第一组从(...)更改为(A(?:pr|ug)|Dec|Feb|J(?:an|u[ln])|Ma[ry]|Nov|Oct|Sep)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM