找不到带有Python正则表达式':'字符的时间戳

时间:2018-12-31 13:00:43

标签: python regex

我正在自学python,并尝试实现正则表达式以从应用程序日志文件中获取时间戳(我通常使用 grep cut awk 为此)

我的日志文件包含很多以下一个日期和时间开头的行

18.12.19 14:03:16 [ ..... # message error
18.12.19 14:03:16 [
:

我通常使用简单的grep命令grep "14\:03\:16" mytext 这个表达式的工作方式是“ 14:03:16”,因此在研究之后,我想到了这个正则表达式:

res是上面的行之一

datap = re.compile(r'(\d{2}):(\d{2}):(\d{2})')
m = datap.match(res)

这什么也找不到

datap = re.compile(r'(\d{2}).(\d{2}).(\d{2})')
m = datap.match(re

捕获日期。

为什么找不到字符:?我也尝试过使用\:,而且它也不起作用。预先感谢。

1 个答案:

答案 0 :(得分:4)

re.match尝试从字符串的开头匹配正则表达式。

从文档中

  

如果字符串开头的零个或多个字符与   正则表达式模式,返回相应的match对象。   如果字符串与模式不匹配,则返回None;否则返回false。请注意,   与零长度匹配不同。

当你这样做

datap = re.compile(r'(\d{2}).(\d{2}).(\d{2})')
m = datap.match(res)

正则表达式实际上匹配日期,而不是时间(因为它在字符串的开头):

print(m)
# <re.Match object; span=(0, 8), match='18.12.19'>

如果使用re.search,则将获得预期的输出:

import re

res = '18.12.19 14:03:16 [ ..... # message error'
datap = re.compile(r'(\d{2}):(\d{2}):(\d{2})')
m = datap.search(res)
print(m)
# <re.Match object; span=(9, 17), match='14:03:16'>