我想从txt文件中捕获小时数。例如:
在文件中有一些文章。我想花几个小时:
11:51
00:32但我不能带13:51或者11:61去。我当前的代码不能工作。
while ($word = <$fh>) {
if ($word =~ /\d\d:\d\d/) {
print $word . "\n";
}
}发布于 2014-05-12 05:25:47
不要把正则表达式当作拐杖。如果你这样做了,你就会陷入XY Problem的境地。
如果可以使用简单的if语句验证捕获,那么就这样做。不要纠结于一种解决方法:
use strict;
use warnings;
while (my $line = <DATA>) {
while ($line =~ /\b(\d\d:\d\d)\b/g) {
my $time = $1;
my ($hour, $min) = split ':', $time;
if ($hour < 13 && $min < 60) {
print "Time = $time\n"
}
}
}
__DATA__
11:51
00:32
13:51
11:61输出:
Time = 11:51
Time = 00:32发布于 2014-05-12 05:25:12
如果您有AM/PM格式的时间,但不能超过12:00,则需要使用数字范围:
/(?:0[1-9]|1[0-2]):[0-5]\d/(?:0[1-9]|1[0-2])将匹配0[1-9] (01-09)或1[0-2] (10-12)。
[0-5]\d将匹配00-59。
发布于 2014-05-12 05:19:48
如果您想匹配小时,但仅在看起来像您的示例的行中。
^\d\d?(?=:\d\d?$)如果小时和分钟始终是2位数字,请删除问号。
https://stackoverflow.com/questions/23597996
复制相似问题