Regex查找时间值



我经常遇到这样的情况,我最终会生成两个正则表达式来寻找细微的变化(例如一个脚本用于0-9,另一个脚本由于额外的数字而用于10-99)

我通常使用[0-9]来查找只有一个数字的字符串,然后使用[0-9][0-9]来查找有多个数字的串,有更好的通配符吗?

前任。我要用什么表达式同时查找字符串6:45 AM and 10:52 PM

您可以用大括号指定重复。[0-9]{2,5}匹配两到五位数字。所以您可以使用[0-9]{1,2}来匹配一个或两个。

[0-9]{1,2}:[0-9]{2} (AM|PM)

我个人更喜欢使用d作为数字,因此

d{1,2}:d{2} (AM|PM)

[0-9] 1或2次,然后是:,然后是2次[0-9]:

[0-9]{1,2}:[0-9]{2}s(AM|PM)

或为有效时间:

(?:[1-9]|1[0-2]):[0-9]{2}s(?:AM|PM)

如果您正在寻找时间模式,您可以执行以下操作:

d{1,2}:d{1,2} (AM|PM)

或者对于更具体的时间regex

[0-1]{0,1}[0-9]{1,2}:[0-5][0-9] (AM|PM)

与其他答案非常相似,只是没有捕获AM/PM,这应该是更高效的

d{1,2}:d{1,2}s(?:AM|PM)

如果我有一个文件包含:

1 ABC
2 123XYZ
3上午6:45
4 123DHD
5 ABC
6 10:52 PM
7 CDE

并运行以下

$>grep -P '6:45sAM|10:52sPM' temp
6:45 AM
10:52 PM
$>.

应该做到这一点(-p是perl-regx)

编辑:

也许我误解了,其他答案都很好,如果我只是想找一个时间,但你似乎是在特定的时间之后。其他的将以HH:MM格式匹配ANY时间。

总的来说,我相信你想要的项目应该是|pipe字符,在这种情况下,它用于允许替换短语,并且{n,m}匹配n-m次{1,2}将匹配1-2次,等等。

它可以检查所有类型的时间格式:

例如12:05PM, 3:19AM, 04:25PM, 23:52PM

my $time = "12:52AM";
if ($time =~ /^[01]?[0-9]:[0-5][0-9](AM|PM)/) {
    print "Right Time Dude...";
}
else { print "Wrong time Dude"; }

这是您想要的正则表达式。

    /^[01]?[0-9]:[0-5][0-9](AM|PM)/

将此字符串作为输入:

Sat, 6 May 2017 02:08:08 +0000

我做这个regEx是为了得到一个或两个数字的组合:

[0-9]*:[0-9]*:[0-9]*

最新更新