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