显然我在正则表达式方面很糟糕,这对我来说毫无意义......
我想要一个匹配时间的表达式,比如01:23:45
在字符串中。
我试过这个
(r'(([0-9]*2)[:])*2([0-9]*2)
但它不起作用。我需要能够获得整个时间戳。我试过的其他人只发现了 2 位数字。
恐怕你的中继器错了:
r'\d{2}:\d{2}:\d{2}'
正确的语法是{n,m}
针对最小和最大数字,或{n}
精确匹配。\d
字符类也更容易使用[0-9]
;这对于常规(非Unicode)匹配意味着同样的事情。
为什么还要使用正则表达式 - 使用正确的日期时间函数并免费获得验证......
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}
.
[0-9]{2}
而不是*2
你应该使用{2}
.
[0-9]{2}:[0-9]{2}:[0-9]{2}
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