编写一个简单的正则表达式来查找字符串中的日期和时间。 当刺痛中有特定日期时,识别时间项是一个小问题。这是正则表达式:
TIME_REGEX = "([0-1][0-9]|2[0-3])[:\-\_]?([0-5][0-9])[:\-\_]?([0-5][0-9])"
问题是我需要接受数字之间没有任何内容的时间值,因此两个" [:-_]?"部分。但是,正则表达式匹配即使两者彼此不同。所以这也将与#34; 2011-07-30"时间是20:11:07。
我可以更改正则表达式,因此数字之间的两个项目都是相同的,因此它匹配" 201107" " 20-11-07",但不是" 2011-07"或" 20:11-07"?
答案 0 :(得分:1)
您可以将分隔符存储在一个组中并重复使用它:
TIME_REGEX = "([0-1][0-9]|2[0-3])(?P<sep>[:\-\_]?)([0-5][0-9])(?P=sep)([0-5][0-9])"
在此处,(?P<sep>...)
将此群组的内容存储在名称sep
下,我们认为这是(?P+<sep>)
。这样,两个项目总是必须相同。
示例:
for test in ['201107', '20-11-07', '20-11:07']:
match = re.match(TIME_REGEX, test)
if match:
print test, match.group(1, 3, 4), "delimiter: '{}'".format(match.group('sep'))
的产率:
201107 ('20', '11', '07') delimiter: ''
20-11-07 ('20', '11', '07') delimiter: '-'
答案 1 :(得分:1)
我建议您将第一个中间字符与一个组匹配,并使用该组的结果匹配第二个字符,如下所示。您只需要在最后检索正确的组:
import re
times = ['20-11-07', '2011-07', '20-1107', '201107', '20:11-07', '20-10:07', '20:11:07']
TIME_REGEX = r'([0-1][0-9]|2[0-3])([:\-\_]*)([0-5][0-9])(\2)([0-5][0-9])'
for time in times:
m = re.search(TIME_REGEX, time)
if m:
print(time, "matches with following groups:", m.group(1), m.group(3), m.group(5))
else:
print(time, "does not match")
# 20-11-07 matches with following groups: 20 11 07
# 2011-07 does not match
# 20-1107 does not match
# 201107 matches with following groups: 20 11 07
# 20:11-07 does not match
# 20-10:07 does not match
# 20:11:07 matches with following groups: 20 11 07