Python Regex表达式失败 - 无法弄清楚原因

时间:2014-03-20 17:13:28

标签: 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: 
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中运行它时,我得不到任何回报。

有什么想法吗?

2 个答案:

答案 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 flagre.M

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