正则表达式的时间戳

时间:2012-07-26 08:46:58

标签: python regex

显然,我对正则表达式很可怕,对我来说没有任何意义......

我想要一个匹配时间的表达式,比如字符串中的01:23:45

我试过这个

(r'(([0-9]*2)[:])*2([0-9]*2)

但它不起作用。我需要能够获得整个时间戳。我试过的其他人只发现了2位数字。

5 个答案:

答案 0 :(得分:9)

你担心你的中继者错了:

r'\d{2}:\d{2}:\d{2}'

正确的语法是{n,m}表示最小和最大数字,或{n}表示完全匹配。 \d字符类也更容易使用[0-9];对于常规(非Unicode)匹配,它意味着相同的事情。

答案 1 :(得分:3)

为什么要使用正则表达式 - 使用正确的日期时间函数并免费获得验证......

from datetime import datetime
time = datetime.strptime('01:23:45', '%H:%M:%S').time()
print time.hour, time.minute, time.second
# 1 23 45

达夫时间:

>>> datetime.strptime('99:45:63', '%H:%M:%S')
Traceback (most recent call last):
  File "<pyshell#36>", line 1, in <module>
    datetime.strptime('99:45:63', '%H:%M:%S')
  File "/usr/lib/python2.7/_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data '99:45:63' does not match format '%H:%M:%S'

答案 2 :(得分:2)

重复上一场比赛两次的正确说明符是{2}

[0-9]{2}

答案 3 :(得分:2)

而不是*2您应该使用{2}

[0-9]{2}:[0-9]{2}:[0-9]{2}

答案 4 :(得分:0)

import re

timestamp_regex = r'(2[0-3]|[01][0-9]|[0-9]):([0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])'


print(bool(re.match(timestamp_regex, '01:23:45')))  # True
print(bool(re.match(timestamp_regex, '01:01:45')))  # True
print(bool(re.match(timestamp_regex, '01:01:01')))  # True
print(bool(re.match(timestamp_regex, '1:1:1')))     # True
print(bool(re.match(timestamp_regex, '25:1:1')))    # False

演示:https://ideone.com/eE0Pnb