gpt4 book ai didi

regex - Perl 一次完成多个模式匹配和替换

转载 作者:行者123 更新时间:2023-12-02 05:43:37 25 4
gpt4 key购买 nike

09/27/2009 19:48:00 Departure Location

我正在尝试匹配和替换文本文件中的给定行。日期和时间之后的文本长度可能会有所不同。我正在逐行读取文件,我需要将最终输出打印为--
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 初学者。任何帮助表示赞赏。谢谢!

最佳答案

split有限制在这里可以很好地工作。 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);
}

输出:

日期=> 09/27/2009
时间=> 19:48:00
文本=> 出发地点

关于regex - Perl 一次完成多个模式匹配和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11388996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com