Python正则表达式提取

2024-04-16 05:40:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为“strtosearch2”的字符串,如下所示:

[02112017 072755 332][1][ERROR]> ----Message : IDC_NO_MEDIA
[02112017 072755 332][1][INFO]> ----              
[02112017 104502 724][1][ERROR]> ----Message : DEV_NOT_READY
[02112017 104502 724][1][INFO]> ----              
[02112017 104503 331][1][ERROR]> ----Message : DEV_NOT_READY
[02112017 104503 331][1][INFO]> ----  

我想提取只有“ERROR”行的日期。我写了我的正则表达式如下:

down2Date= re.findall(r'\[(.*?)\s\d{6}\s\d{3}\]\[\d\]\[ERROR\]',strtosearch2,re.DOTALL)

输出如下:

02112017
02112017 072755 332][1][INFO]> ----              
[02112017
02112017 104502 724][1][INFO]> ----              
[02112017

我的目标输出:

02112017
02112017
02112017

我怎样才能解决这个问题?。谢谢


Tags: no字符串devreinfomessagenoterror
2条回答

试试这个:

down2Date = re.findall(r'^\[\d+\s\d+\s\d+\]\[\d\]\[ERROR\]', strtosearch2)

您可以将模式锚定在行/字符串的开头,并移除re.DOTALL修饰符:

re.findall(r'(?m)^\[(.*?)\s\d{6}\s\d{3}]\[\d]\[ERROR]', s)

参见regex demo

使用re.DOTALL.匹配任何字符,包括换行字符

使用(?m)^匹配每行的开头,而不仅仅是整个字符串的开头

另外,\s可以匹配换行符,因此您可能希望使用[^\S\r\n]而不是它来只匹配水平空格

相关问题 更多 >