提问人:Nikita Amlani 提问时间:10/10/2023 最后编辑:zdimNikita Amlani 更新时间:10/11/2023 访问量:69
使用正则表达式从字符串中提取日期
Extracting date from string using regular expression
问:
我有一个用例可以从字符串中提取日期部分,如下所示:
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。
答:
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
评论
1
是成功匹配的值。您没有捕获字符串,但您确实匹配了它。