Perl多次模式匹配和一次性替换

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的初学者.任何帮助表示赞赏.谢谢!

Sin*_*nür 5

分开限制将在这里很好地工作.这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