Pri*_*nce 2 regex perl pattern-matching
09/27/2009 19:48:00 Departure Location
Run Code Online (Sandbox Code Playgroud)
我试图匹配并替换文本文件中的给定行.日期和时间之后的文本长度可以变化.我正在逐行读取文件,我需要将最终输出打印为 -
Date=> 09/27/2009
Time=> 19:48:00
Text=> Departure Location
Run Code Online (Sandbox Code Playgroud)
我试图在一次通过中进行如下替换 -
if($line =~ m/(\d+)\/(\d+)\/(\d+)\h{1}(\d+):(\d+):(\d+)/){
$line =~ s/(\[a-zA-Z])/\nText=> $1/;
$line =~ s/(\d+)\/(\d+)\/(\d+)/\nDate=> $1\/$2\/$3/;
$line =~ s/\h{1}(\d+):(\d+):(\d+)/\nTime=> $1\:$2\:$3/;
print FH "$line\n";
}
Run Code Online (Sandbox Code Playgroud)
但我得到的只是 -
Date=> 09/27/2009
Time=> 19:48:10 Departure Location
Run Code Online (Sandbox Code Playgroud)
我知道匹配时存在问题,Text但我无法修复它.我仍然是Perl的初学者.任何帮助表示赞赏.谢谢!
分开限制将在这里很好地工作.这pairwise不是绝对必要的,但帮助我避免循环:
#!/usr/bin/env perl
use strict; use warnings;
use feature 'say';
use List::MoreUtils qw( pairwise );
my $input = q{09/27/2009 19:48:00 Departure Location};
my @fields = qw(Date Time Text);
my @values = split ' ', $input, @fields;
{
no warnings 'once';
say join("\n", pairwise { "$a=> $b" } @fields, @values);
}
Run Code Online (Sandbox Code Playgroud)
输出:
Date=> 09/27/2009 Time=> 19:48:00 Text=> Departure Location