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
可以使$
匹配行尾和字符串尾