Python正则表达式提取

Python正则表达式提取,python,regex,python-3.x,Python,Regex,Python 3.x,我有一个名为“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]> ---

我有一个名为“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
输出如下:

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
我怎样才能解决这个问题?。谢谢

试试这个:

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)

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

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


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

删除
re.DOTALL
。建议:有时您不需要定义精确的输入模式。。对于给定的样本,
re.findall(r'(?m)^\[(\d+).*ERROR',strtosearch2)
也可以。如果没有,请在询问时尝试添加相关示例:)有人可以指定此
re.DOTALL
影响了什么吗?@Sanket请查看我的答案。如果指定了DOTALL标志,则此标志与包括换行符在内的任何字符都匹配。详细信息很好,谢谢添加详细信息