Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:使用正则表达式从日志文件读取日期时间_Python_Regex - Fatal编程技术网

python:使用正则表达式从日志文件读取日期时间

python:使用正则表达式从日志文件读取日期时间,python,regex,Python,Regex,我有一个日志文件,其中的文本如下所示 Jul 1 03:27:12 syslog: [m_java][ 1/Jul/2013 03:27:12.818][j:[SessionThread <]^Iat com/avc/abc/magr/service/find.something(abc/1235/locator/abc;Ljava/lang/String;)Labc/abc/abcd/abcd;(bytecode:7) 我想检查一下文件中的每一行,能够应用这个模式,并根据日期和时间

我有一个日志文件,其中的文本如下所示

Jul  1 03:27:12 syslog: [m_java][ 1/Jul/2013 03:27:12.818][j:[SessionThread <]^Iat com/avc/abc/magr/service/find.something(abc/1235/locator/abc;Ljava/lang/String;)Labc/abc/abcd/abcd;(bytecode:7) 
我想检查一下文件中的每一行,能够应用这个模式,并根据日期和时间对行进行排序


有人能帮我吗?谢谢

其中有一个空格需要添加到正则表达式中

text = "Jul  1 03:27:12 syslog: [m_java][ 1/Jul/2013 03:27:12.818][j:[SessionThread <]^Iat com/avc/abc/magr/service/find.something(abc/1235/locator/abc;Ljava/lang/String;)Labc/abc/abcd/abcd;(bytecode:7)"
matches = re.findall(r"\[\s*(\d+/\D+/.*?)\]", text)
print matches
['1/Jul/2013 03:27:12.818']

text=“Jul 1 03:27:12 syslog:[m_java][1/Jul/2013 03:27:12.818][j:[SessionThread其中有一个空格需要添加到正则表达式中

text = "Jul  1 03:27:12 syslog: [m_java][ 1/Jul/2013 03:27:12.818][j:[SessionThread <]^Iat com/avc/abc/magr/service/find.something(abc/1235/locator/abc;Ljava/lang/String;)Labc/abc/abcd/abcd;(bytecode:7)"
matches = re.findall(r"\[\s*(\d+/\D+/.*?)\]", text)
print matches
['1/Jul/2013 03:27:12.818']

text=“Jul 1 03:27:12 syslog:[m_java][1/Jul/2013 03:27:12.818][j:[SessionThread您没有匹配初始空间;您还希望将日期分组以便于提取,并将
\D
*
模式限制为非贪婪模式:

t_pat = re.compile(r".*\[\s?(\d+/\D+?/.*?)\]")
演示:

您可以进一步缩小模式的范围;您只需要为月份匹配3个字母,例如:

t_pat = re.compile(r".*\[\s?(\d{1,2}/[A-Z][a-z]{2}/\d{4} \d{2}:\d{2}:[\d.]{2,})\]")

您没有匹配初始空间;您还希望将日期分组以便于提取,并将
\D
*
模式限制为非贪婪:

t_pat = re.compile(r".*\[\s?(\d+/\D+?/.*?)\]")
演示:

您可以进一步缩小模式的范围;您只需要为月份匹配3个字母,例如:

t_pat = re.compile(r".*\[\s?(\d{1,2}/[A-Z][a-z]{2}/\d{4} \d{2}:\d{2}:[\d.]{2,})\]")
并使用
排序
函数,传入一个函数,并将其用作:

并使用
排序
函数,传入一个函数,并将其用作:


在行首使用日期和时间是否更容易?在
[
1
之间是否真的有空格?时间在[]在秒数方面有更高的精度。我确实在一秒钟内得到了相当多的日志,需要进行排序。@MartijnPieters-这是一个“两位数”的条目。所以这里有一个空格。它可以容纳“28”或其他两位数。在行的开头使用日期和时间可能不容易吗?在
[
1
?以秒为单位,[]内的时间更精确。我确实在一秒钟内得到了很多日志,需要进行排序。@MartijnPieters-这是一个“两位数”条目。因此这里有一个空格。它可以容纳“28”或其他两个数字。我还认为需要将最后一个量词设置为惰性:[\s?\d+/\d+/.]我还认为需要将最后一个量词设置为惰性:[\s?\d+/\d+/.*?]我得到以下错误:date\u string=t\u pat.search(line).group(1)AttributeError:'NoneType'对象没有属性'group'@SupriyaK这是假设行不是None,代码中没有错误检查,如果有,则必须处理None情况,如果行中没有datetime,则需要决定是否跳过它。我得到以下错误:date_string=t_pat.search(line.group)(1)AttributeError:“非类型”对象没有属性“组”@SupriyaK这是假设行不是None,代码中没有错误检查,如果有,则必须处理None情况,如果行中没有datetime,则需要决定是否跳过它。