python - Python多行正则表达式在每个时间戳后提取文本
问题描述
我有一个正在尝试解析的日志文件。每个日志在一行的开头都有一个时间戳,格式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)
我只是不知道如何获取随后的日志,但如果看到另一个时间戳就停止。
解决方案
您可以使用后跟日期时间模式的换行符拆分内容:
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}
- 六位数
推荐阅读
- python - matmul:输入操作数 1 的核心维度 0 不匹配,带有 gufunc 签名 (n?,k),(k,m?)->(n?,m?)(大小 5 与 1 不同)
- python - 人脸识别中的增量学习
- json - 这个 JSON 响应顶部的 `)]}'` 有什么作用?
- reactjs - 如何修复 Jest 错误:ReferenceError: regeneratorRuntime 未定义
- mysql - 选择多个值
- c# - 发送带有内嵌图像的电子邮件时出现问题
- es6-promise - Modernizr 异步测试
- python - 如何通过 Beautiful Soup 过滤雅虎财经数据
- loops - 在 Tableau 中标记所有行相关的行
- javascript - 为什么 var prezzo 不刷新值?