这个问题是我上一个问题的后续问题: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
的输出中?
1条答案
按热度按时间vshtjzan1#
可以使用日期时间模式先匹配日期时间,然后匹配
,
之前的子字符串的其余部分:请参见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]*
-除逗号和换行符外,零个或多个字符