我正在尝试清理一些日志,并希望从消息中提取常规信息。我是python的新手,昨天刚学习了正则表达式,现在遇到了问题。

我的讯息如下:

 Report ZSIM_RANDOM_DURATION_ started
 Report ZSIM_SYSTEM_ACTIVITY started
 Report /BDL/TASK_SCHEDULER started
 Report ZSIM_JOB_CREATE started
 Report RSBTCRTE started
 Report SAPMSSY started
 Report RSRZLLG_ACTUAL started
 Report RSRZLLG started
 Report RGWMON_SEND_NILIST started


我尝试一些代码:

clean_special2=re.sub(r'^[Report] [^1-9] [started]','',text)


但是我认为这段代码将删除所有行,但是我想保留Report ..... Started这样的格式。因此,我只想删除中间的作业名称。

我希望我的结果如下所示:

Report started


任何人都可以帮助我提出一个想法?非常感谢你!

最佳答案

尝试这样的事情:

clean_special2=re.sub(r'(?<=^Report\b).*(?=\bstarted)',' ',text)


说明:(?<=...)是正向后面的,例如该字符串必须与该组的内容匹配,但不会被捕获,因此不会被替换。另一面的内容相同,正向(?=...)表示正。 \b是一个单词边界,因此这些单词之间的所有内容都将匹配。由于这也会修剪空白,因此替换为单个空白。

10-06 03:37