python爬取网页停止工作_通过正则表达式时,Python脚本停止工作

我有一个大文本文件,并且正在使用for ... in语句逐行处理它:

f = open(sys.argv[1])

for line in f:

我通过一些正则表达式传递了这些代码。但是,当此长行通过正则表达式传递时,我的代码停止了:这是一行:

Mar 25 09:42:22 2011 amavis[30883]: (30883-10) Passed CLEAN, [95.0.85.202] [95.0.85.202] -> ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

这是正则表达式和代码停止的地方:

pattern_clean = re.compile("(\S{3} \d{2} \d{2}\:\d{2}\:\d{2} \d{4}).*CLEAN, (LOCAL )?(\[[.\d]+\] )?(\[[.\d]+\] )? -> (,)* Message-ID: , mail_id: (\S*), Hits: (\S*), queued_as: (\S*), (\S*)")

if pattern_clean.search(line) != None:

我已经尝试在其他文件上运行了此脚本,但工作正常。该文件也可以正常工作,直到出现这一行。是什么导致此问题?

解决方案

编写正则表达式可能需要非常长的时间才能匹配或失败。您已经编写了这样的正则表达式。基本上,任何时候您看到*或+嵌套在另一个内部*或+感到非常恐惧。

我认为您的问题可能是:

(,)*

自己将所有内容匹配到下一个空格,然后当完整模式不匹配时将尝试缩短匹配时间,然后外部*意味着它将尝试许多不同的组合来匹配20封电子邮件,后跟一个或19个跟着1,或18,再跟2,或18,再跟1,再跟1。

建议您尝试\S使用无法匹配终止字符的模式替换所有出现的事件。例如 ]*>或[^, ]*,可以减少问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值