09/27/2009 19:48:00 Departure Location
我想匹配并替换文本文件中给定的行。日期和时间之后的文本长度可能会有所不同。我读一行文件中的行,我需要最终输出到打印as--Perl多重模式匹配和替换一次传递
Date=> 09/27/2009
Time=> 19:48:00
Text=> Departure Location
我试图做的换人在一次通过如下 -
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";
}
但所有我我得到的是这个 -
Date=> 09/27/2009
Time=> 19:48:10 Departure Location
我知道有一个匹配的Text
一个问题,但我不能修复它。我仍然是一名Perl初学者。任何帮助表示赞赏。谢谢!
尼斯,戴维。鉴于这一行 - 以及您的数据警告 - 这也适用:'s /(\ S +)(\ S +)(。*)/ Date => $ 1 \ nTime => $ 2 \ nText => $ 3 \ n /' – Kenosis 2012-07-09 04:52:22
肯尼迪是的,那也可以。我倾向于赞成更明确的匹配,以便尽可能少地误报误差,以便我可以更好地控制匹配发生的字符串中的哪个位置,但是您的方法也可以工作。 – DavidO 2012-07-09 04:55:11
您的正则表达式理由很有意义,您添加的命名捕获有助于提高可读性。 – Kenosis 2012-07-09 05:27:02