[英]Python multiline regex extract text after every timestamp
我有一个正在尝试解析的日志文件。 每个日志在一行的开头都有一个时间戳,格式YYY-MMM-DD HH:MM:SS.SSSSSS -0400:
时区信息是可选的(我现在可以忽略)。 我可以很好地匹配这些,但不能匹配时间戳之后的日志,它可能立即在同一行或下一行开始,并且可能有多行长。 我对正则表达式很满意,但我很少做多行正则表达式。
这是我尝试过的似乎是壁橱的东西
# finds the first timestamp, everything to end of file is the log
re.findall('\n(^\d{4}-[A-Za-z]{3}-\d{2} \d{2}:\d{2}:\d{2}.\d{6}).*?:(.*)', log, re.DOTALL)
# finds every timestamp, all logs are empty (obviously too un-greedy)
re.findall('\n(^\d{4}-[A-Za-z]{3}-\d{2} \d{2}:\d{2}:\d{2}.\d{6}).*?:(.*?)', log, re.DOTALL)
我只是不知道如何 go 获取随后的日志,但如果看到另一个时间戳就停止。
您可以使用后跟日期时间模式的换行符拆分内容:
re.split(r'\n(?=\d{4}-[A-Za-z]{3}-\d{2} \d{2}:\d{2}:\d{2}\.\d{6})', log)
细节
\n
- 换行符(?=\d{4}-[A-Za-z]{3}-\d{2} \d{2}:\d{2}:\d{2}\.\d{6})
- 正向前瞻,需要以下模式立即出现在当前位置的右侧:
\d{4}-
- 四位数字和一个连字符[A-Za-z]{3}-
- 三个字母和一个连字符\d{2}
- 两位数
- 一个空间\d{2}:
- 两位数和:
\d{2}:\d{2}
- - 两位数, :
, 两位数\.
- 一个点(注意它必须被转义)\d{6}
- 六位数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.