首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串中捕获时间

从字符串中捕获时间
EN

Stack Overflow用户
提问于 2014-05-12 05:14:34
回答 4查看 71关注 0票数 1

我想从txt文件中捕获小时数。例如:

在文件中有一些文章。我想花几个小时:

代码语言:javascript
复制
11:51
00:32

但我不能带13:51或者11:61去。我当前的代码不能工作。

代码语言:javascript
复制
while ($word = <$fh>) {
    if ($word =~ /\d\d:\d\d/) {
        print $word . "\n";
    }
}
EN

回答 4

Stack Overflow用户

发布于 2014-05-12 05:25:47

不要把正则表达式当作拐杖。如果你这样做了,你就会陷入XY Problem的境地。

如果可以使用简单的if语句验证捕获,那么就这样做。不要纠结于一种解决方法:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
Time = 11:51
Time = 00:32
票数 2
EN

Stack Overflow用户

发布于 2014-05-12 05:25:12

如果您有AM/PM格式的时间,但不能超过12:00,则需要使用数字范围:

代码语言:javascript
复制
/(?: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。

票数 1
EN

Stack Overflow用户

发布于 2014-05-12 05:19:48

如果您想匹配小时,但仅在看起来像您的示例的行中。

代码语言:javascript
复制
^\d\d?(?=:\d\d?$)

如果小时和分钟始终是2位数字,请删除问号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23597996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档