perl 利用正则表达式从字符串中提取日期

rvpgvaaj  于 12个月前  发布在  Perl
关注(0)|答案(2)|浏览(94)

我有一个从字符串中提取日期部分的用例,如下所示:

Job-2023-04-14.17.14.34

我需要输出为2023-04-14。我尝试了下面的代码:

# Extract the date part from the string using a regular expression.
my $date = $string =~ /\d{4}-\d{2}-\d{2}/;

# Check if the date part is defined.
if (defined $date) {
  # Print the date part.
  print "$date\n";
} else {
  # The date part is not defined.
  print "The string does not contain a valid date.\n";
}

但是,它打印出1。

yyhrrdl8

yyhrrdl81#

在正则表达式中使用捕获括号,并在$date周围使用括号来强制列表上下文:

my ($date) = $string =~ /(\d{4}-\d{2}-\d{2})/;

输出量:

2023-04-14

标签:Perl Idioms Explained - @ary = $str =~ m/(stuff)/g

9njqaruj

9njqaruj2#

使用regex的另一种选择是使用能够解析日期的库,如DateTime::Format::Strptime

#!/bin/perl

use strict;
use warnings;

use DateTime::Format::Strptime;

my $job='Job-2023-04-14.17.14.34';

my $strp = DateTime::Format::Strptime->new(
    pattern => 'Job-%Y-%m-%d.%H.%M.%S'
);

my $dt = $strp->parse_datetime($job);

print "$dt\n";

输出量:

2023-04-14T17:14:34

相关问题