Python正则表达式失败-can';我不明白为什么

Python正则表达式失败-can';我不明白为什么,python,regex,Python,Regex,我正在使用: re.search(r'^[A-Za-z0-9\:\(\) ]+\[[A-Za-z0-9\.]+\:[0-9]+\]$', log) 要搜索如下所示的日志: "Logged at Thursday, March 20, 2014 20:48:03 FileVersion: 3.5.0.44954 ProductVersion: 3.5.0.44954 LogFile: Game.log Exception Code: FATAL_ERROR Exception Addr: E

我正在使用:

re.search(r'^[A-Za-z0-9\:\(\) ]+\[[A-Za-z0-9\.]+\:[0-9]+\]$', log)
要搜索如下所示的日志:

"Logged at Thursday, March 20, 2014 20:48:03
FileVersion: 3.5.0.44954
ProductVersion: 3.5.0.44954
LogFile: Game.log

Exception Code: FATAL_ERROR
Exception Addr: 
Exception Module: 
Exception Description: FATAL_ERROR, 
Memory in use: 462.7MB
Debug Status: 
Out of Memory: 0

Call Stack Trace:
10) CSystem::FatalError()  [systemwin32.cpp:1267]
9) CFatalError()  [isystem.h:1528]
当我在Sublime Text/Notepad++中测试表达式时,它成功了。但是,当我像上面Python中所示那样运行它时,我什么也得不到


有什么想法吗?

使用re.M进行多行正则表达式匹配

re.search(r'^[A-Za-z0-9\:\(\) ]+\[[A-Za-z0-9\.]+\:[0-9]+\](?:[\n\r]|\Z)', log, re.M)
                                                              ^^^^^^^^

此外,此正则表达式正在检查正则表达式末尾的
[\n\r]
\Z
,而不是
$
。仅供参考,
\Z
表示输入字符串的结尾。

详细阐述Sabuj Hassan的答案,问题只是Python没有将行的结尾识别为终端。这是因为您没有使用,
re.M


如果没有此标志,Python不会为
\n
字符指定任何特殊含义,因此
$
将只匹配字符串的最末端。通过包含
re.M
标志,Python会在所有
\n
字符之前自动添加终端,从而允许
$
匹配行尾和字符串尾。

您想找到什么?10)CSystem::FatalError()[systemwin32.cpp:1267]在我使用ST/n++进行测试时,它正在工作,我们只想找到第一个匹配项,所以多线不是问题。当我们在SublimateText中运行查询时,我们得到了第一行,这就是我们要查找的内容。但当我在Python中运行此命令时,我只返回了一个NoneType。@JimWeinhart您仍然需要使用多行标志,因为(因为在单行模式下,
\n
只是一个普通字符)。使用
re.M
可以使
$
匹配行尾和字符串尾