python 解析日志文件并忽略两个目标之间的文本

qv7cva1a  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(77)

这个问题是我上一个问题的后续问题:Parsing text and JSON from a log file and keeping them together
我有一个日志文件your_file.txt,结构如下,我想提取时间戳、run、user和json:

A whole bunch of irrelevant text
2022-12-15 12:45:06 garbage, run: 1, user: james json:
[{"value": 30, "error": 8}]

另一个stack用户非常乐于助人,他提供了下面的删节代码来提取相关部分:

import re

pat = re.compile(
    r'(?ms)^([^,\n]+),\s*run:\s*(\S+),\s*user:\s*(.*?)\s*json:\n(.*?)$'
)

with open('your_file.txt', 'r') as f_in:
    print(pat.findall(f_in.read()))

返回此值,然后进一步处理:

[('2022-12-15 12:45:06 garbage', '1', 'james', '[{"value": 30, "error": 8}]')]

如何修改用于忽略时间戳后的单词“垃圾”的正则表达式,使该单词不包含在pat.findall的输出中?

vshtjzan

vshtjzan1#

可以使用日期时间模式先匹配日期时间,然后匹配,之前的子字符串的其余部分:

(?ms)^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})[^,\n]*,\s*run:\s*(\S+),\s*user:\s*(.*?)\s*json:\n(.*?)$

请参见regex demo
([^,\n]+)将替换为匹配的(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})[^,\n]*

  • (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})-第1组:四个数字,-出现两次,然后是两个数字,空格,两个数字,然后:出现两次,然后是两个数字
  • [^,\n]*-除逗号和换行符外,零个或多个字符

相关问题