找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 7868|回复: 1

[求助] python的match正则超时问题

1

主题

1

帖子

0

积分

贫民

积分
0
墨沫心 发表于 2013-10-16 22:02:58 | 显示全部楼层 |阅读模式
我遇到个正则超时问题如下:

    reg = re.compile(r"""^
                    \s{0,5}(\S+?(\s?\S+)(?!SOLE\s*\d+))\s{2,}                                     #1 grab NAME OF ISSUER
                    (\S+(\s?\S+|\s+\d?[\/.]\S+))\s+                                              #3 grab TITLE OF CLASS
                    (?!\D{7,12}\s|\d+[.,]+[\d.,]*|USD[\d.,]{1,4})([^\$-(),\/\s]{7,12})\s+         #5 grab CUSIP (12 could be ISIN)
                    [,\$\sUSD](-*[\d,.]+)\s+                                                       #6 grab VALUE.
                    [,\$\s](-*[\d,.]+)\s*                                                          #7 SHARES or PRN AMOUNT.
                    (SH|PRN|SHS)\s*                                                              #8 grab 'SH' or 'PRN'
                    (CALL|PUT|COM|C\s|P\s)                                                         #9 grab CALL or PUT. If empty, return whitespace.               
                    $""", re.IGNORECASE|re.X)






  line = 'CRESCENDO PHARMACEUTICALS CO   COM              225637107                25 SH       DEF/OTH 01               25'


    result = reg.match(line)





程序运行到match一直出不来卡死了,哪位大神能帮忙看看,优化正则或者做超时处理都可以,我完全卡住了,解决不了。这个匹配是在循环里,我希望的效果是如果匹配超时就跳过进入下一条的匹配。  
回复

使用道具 举报

0

主题

4

帖子

64

积分

新手

积分
64
icymirror 发表于 2013-10-18 10:21:07 | 显示全部楼层
不是非常清楚你想要做的匹配的串是什么格式的。
不过,在你的表达式的前面部分,做下修改,\"^\\s{0,5}(\\S+?(\\s?\\S+)(?!SOLE\\s*\\d+))\\s+(\\S+(\\s?\\S+|\\s+\\d?[\\/.]\\S+))\\s+\"是可以匹配出\"CRESCENDO PHARMACEUTICALS CO   \",后面的部分,因为不清楚问题是什么,没有办法进行下去。(另:原来的串\"^\\s{0,5}(\\S+?(\\s?\\S+)(?!SOLE\\s*\\d+))\\s{2,}\"被改了下结尾部分\"^\\s{0,5}(\\S+?(\\s?\\S+)(?!SOLE\\s*\\d+))\\s+\")
另外:如果你想超时退出的话,建议:使用线程,主线程做时间等待,新建的线程做匹配,主线程在时间到达之前,收到新建线程的结果就返回,如果没有收到结果,就强制中断线程,并且返回无结果。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表