如何在Perl中使用正则表达式进行以下转换?
British style US style
"2009-27-02" => "2009-02-27"
我是Perl的新手并且对regex了解不多,我能想到的只是提取“ - ”的不同部分然后重新连接字符串,因为我需要动态进行转换,我觉得我的方法会非常缓慢和丑陋。
答案 0 :(得分:13)
use strict;
use warnings;
use v5.10;
my $date = "2009-27-02";
$date =~ s/(\d{4})-(\d{2})-(\d{2})/$1-$3-$2/;
say $date;
答案 1 :(得分:5)
您询问了正则表达式,但是对于这种明显的替换,您还可以编写split
和parse
的函数。在我的机器上它的速度提高了约22%:
my @parts = split '-', $date;
my $ndate = join( '-', @parts[0,2,1] );
你也可以保留各种订单,如下:
my @ymd = qw<0 2 1>;
my @mdy = qw<2 1 0>;
它们可以像第一部分中的文字序列一样使用:
my $ndate = join( $date_separator, @date_parts[@$order] );
只是一个想法。
答案 2 :(得分:4)
您还可以使用Date::Parse来阅读和转换日期。有关详细信息,请参阅this question。