我正在使用:
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中运行它时,我得不到任何回报。
有什么想法吗?
答案 0 :(得分:1)
使用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
表示输入字符串的结尾。
答案 1 :(得分:1)
阐述Sabuj Hassan的答案,问题很简单,就是Python没有认识到终端的终点。这是因为您没有使用the MUTILINE
flag,re.M
。
如果没有此标志,Python不会为\n
个字符赋予任何特殊含义,因此$
只会匹配字符串的最后一端。通过包含re.M
标志,Python会在所有\n
个字符之前自动添加终端,从而允许$
匹配行尾和字符串结尾。