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

Extracting date from string using regular expression

提问人:Nikita Amlani 提问时间:10/10/2023 最后编辑:zdimNikita Amlani 更新时间:10/11/2023 访问量:69

问:

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

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。

字符串 datetime perl 正则表达式

评论

1赞 TLP 10/10/2023
1是成功匹配的值。您没有捕获字符串,但您确实匹配了它。

答:

3赞 toolic 10/10/2023 #1

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

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

输出:

2023-04-14

参见:Perl 成语解释 - @ary = $str =~ m/(stuff)/g

2赞 Ted Lyngmo 10/10/2023 #2

使用式的替代方法是使用能够解析日期的库,例如: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