繁体   English   中英

Python 多行正则表达式在每个时间戳后提取文本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM