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