gpt4 book ai didi

regex - 使用 Perl 正则表达式重新排列时间戳

转载 作者:行者123 更新时间:2023-12-04 15:02:57 25 4
gpt4 key购买 nike

我想用尽可能少的代码用 Perl 正则表达式重新排列时间戳。时间戳的原始格式如下:

2011/12/29 20:19:45

我需要做的就是将其转换为前面的年份而不是月份/日期之后,如下所示:
12/29/2011 20:19:45

我能够通过下面的 3 行代码实现这一点。我只是想知道是否有办法用更少的代码来做到这一点。特别是我试图取消将 $1 保存到中间变量中的中间行,并直接在正则表达式中为第二次替换指定第一次替换中的 $1,但这导致错误:“在串联中使用未初始化的值 $1( .) 或字符串。”

如果第二行不能去掉,那么这似乎也不能减少到一行?
#my $ts = '2011/12/29 20:19:45'; #input to a subroutine

$ts =~ s/^(\d{4})\///;
my $year = $1;
$ts =~ s/ /\/$year /;

最佳答案

给你:

$ts =~ s|^(\d{4})/(\d{2})/(\d{2})(.+)$|$2/$3/$1$4|;

请注意,上面的表达式要求时间戳正好有 2 位数字表示月份和日期,以及 4 位数字表示年份。但是你可以让它更短但更可靠:
$ts =~ s|^(\d+)/(\d+)/(\d+)(.+)$|$2/$3/$1$4|;

这将正确处理像 1/12/98 12:34:56 这样的时间戳。

关于regex - 使用 Perl 正则表达式重新排列时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8746418/

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