我正在自学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
捕获日期。
为什么找不到字符:
?我也尝试过使用\:
,而且它也不起作用。预先感谢。
答案 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'>