Python正则表达式提取

问题描述 投票:1回答:2

我有一个名为“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

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

python regex python-3.x
2个回答
2
投票

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

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

regex demo

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

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

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


0
投票

试试这个:

down2Date = re.findall(r'^\[\d+\s\d+\s\d+\]\[\d\]\[ERROR\]', strtosearch2)
© www.soinside.com 2019 - 2024. All rights reserved.