我有一个名为“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
我怎样才能解决这个问题 ?。谢谢
您可以在行/字符串的开头锚定模式并删除re.DOTALL
修饰符:
re.findall(r'(?m)^\[(.*?)\s\d{6}\s\d{3}]\[\d]\[ERROR]', s)
使用re.DOTALL
,.
匹配任何字符,包括换行符。
使用(?m)
,^
匹配每行的开头,而不仅仅是整个字符串的开头。
此外,\s
可以匹配换行符,因此您可能希望使用[^\S\r\n]
而不是仅匹配水平空格。
试试这个:
down2Date = re.findall(r'^\[\d+\s\d+\s\d+\]\[\d\]\[ERROR\]', strtosearch2)