您的位置:首页 > 编程语言 > Python开发

python正则表达式之贪婪引发的匹配无法退出,CPU 100%

2013-03-20 12:31 691 查看
正则表达式:/+{3}/s{4}COMPANY(.|/s)*-{3}/s{4}END

match匹配下面这段字符串可以,

+++ COMPANY 2009-06-06 20:54:02

O&M CMD = COMMAND

SDFL= 2K

--- END

+++ COMPANY 2009-06-06 20:54:02

+++ COMPANY 2009-06-06 20:54:02

O&M CMD = COMMAND

SDFL=3K

--- END

但是,匹配下面这段就出问题了,使用match匹配无法退出,CPU占有率100%

+++ COMPANY 2009-06-06 20:54:02

O&M CMD = COMMAND

SDFL= 2K

--- END

+++ COMPANY 2009-06-06 20:54:02

+++ COMPANY 2009-06-06 20:54:02

O&M CMD = COMMAND

SDFL=3K

========================================

另外,使用 正则表达式:(/+{3}/s{4}COMPANY(.|/s)*-{3}/s{4}END)?

是无法进行最小匹配,即非贪婪匹配的。

上面的正则表达式是贪婪的,/+{3}/s{4}COMPANY(.|/s)*-{3}/s{4}END ,(.|/s)*会进行贪婪的、尽可能多的匹配。(但上面第二个字符串仍有满足条件的字串,即便进行贪婪匹配,但也不至于无法退出啊,CPU占有100%?这一点一直没有想明白)。

解决之道:

把上面的正则表达式改成非贪婪匹配就可以了,/+{3}/s{4}COMPANY(.|/s)*? -{3}/s{4}END,

通过使用?来让re引擎尽可能少的进行匹配。

转自:http://blog.csdn.net/oldsmith/article/details/4248217
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: