使用re在日志文件中查找字符串

时间:2015-10-27 13:44:54

标签: python regex

日志文件中的行我将搜索信息

bkup = "2015-03-27 09:54 *** Backup done.  Errors: 0.  Processed files: 8748.    Backed up files: 8748. Total size: 5.80 GB ***"

代码我会用来提取信息

end = re.findall(r'\d{4}\-\d{2}\-\d{2}\s\d{2}\:\d{2}\s\*\*\*\sBackup\sdone\.\s\sErrors:\s\d{1,5}\.\s\sProcessed\sfiles:\s\d{1,5}\.\sBacked\sup\sfiles:\s\d{1,5}\.\sTotal\ssize:\s\d{1,5}\.\d{1,2}\d{1,2}\s[M|G]B\s\*\*\*', bkup)

这适用于"总大小:"引用为MB或GB,但在读取" bytes"

时不引用

e.g。

bkup = "2015-03-27 09:54 *** Backup done.  Errors: 0.  Processed files: 8748. Backed up files: 8748. Total size: 0 bytes ***"

有没有办法找到MB或GB或字节。 我不是Python的专家,所以不要惹我生气。这是我的第一个问题。

3 个答案:

答案 0 :(得分:1)

import re
re.findall(r"\d+(?:\.\d+)?\s*(?:[GM]B|bytes?)","2015-03-27 09:54 *** Backup done.  Errors: 0.  Processed files: 8748.    Backed up files: 8748. Total size: 5.80 GB *** 5.80 MB 612323 bytes   612323 byte",re.I)

您可以直接使用此功能。See Demo

答案 1 :(得分:0)

你想要的是你的表达: (MB|GB|bytes) 它将匹配“MB”或“GB”或“字节”。

答案 2 :(得分:0)

m = re.compile(r'\d{4}\-\d{2}\-\d{2}\s\d{2}\:\d{2}\s\*\*\*\sBackup\sdone\.\s\sErrors:\s\d{1,5}\.\s\sProcessed\sfiles:\s\d{1,5}\.\sBacked\sup\sfiles:\s\d{1,5}\.\sTotal\ssize:\s\d+(\.\d+)?\s(MB|GB|bytes)\s\*\*\*')
if m.match(bkup):
    # do something
    pass

\ d +(。\ d +)?匹配5.80或0

(MB | GB | bytes)匹配MB或GB或字节