如何重新排序字符串中的子字符串?

时间:2010-01-07 20:13:31

标签: regex perl

如何在Perl中使用正则表达式进行以下转换?

British style   US style
"2009-27-02" => "2009-02-27"

我是Perl的新手并且对regex了解不多,我能想到的只是提取“ - ”的不同部分然后重新连接字符串,因为我需要动态进行转换,我觉得我的方法会非常缓慢和丑陋。

3 个答案:

答案 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)

您询问了正则表达式,但是对于这种明显的替换,您还可以编写splitparse的函数。在我的机器上它的速度提高了约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