`

python 在小于2.7.5版本中 re模块出现 nothing to repeat 错误

阅读更多
python 在小于2.7.5版本中的 re模块出现 nothing to repeat 错误

    在运行带正则python程序时,发生一个错误如下:

Traceback (most recent call last):
  File "multi_views_statistics_9.10.py", line 80, in ?
    retcode = re.match('^\+{2}\s+(.*)?\s+(?=\+{2})',line);
  File "/usr/lib64/python2.4/sre.py", line 129, in match
    return _compile(pattern, flags).match(string)
  File "/usr/lib64/python2.4/sre.py", line 227, in _compile
    raise error, v # invalid expression
sre_constants.error: nothing to repeat


    想匹配的字符串是
++ Incoming Queries ++

    发生错误的语句:retcode = re.match('^\+{2}\s+(.*)?\s+(?=\+{2})',line);

    问题定位过程中,发现可能是python的一bug,问题出在上述语句中粗体红色中,因为python模块re对“*”匹配处理异常导致语句执行失效,那么如何对"*"等价呢,这个具体要看具体的需求是什么。

    例如本程序中的我需匹配表格中 ”+“ 中间的单词,那么我的作法是:.* 替换成 .[a-zA-z\s]*即可,所以对低版本(<2.7.5)python 模块re的处理中,"*" 可以使用以下规律匹配
   
*替换成 [你想匹配的正则表达式]*


    综上所述,我的程序修正为:
    原语句:
 retcode = re.match('^\+{2}\s+(.*)?\s+(?=\+{2})',line);

    新语句:
  retcode = re.match('^\+{2}\s+(.[a-zA-z\s]*)?\s+(?=\+{2})',line);

   
    希望对大家有所帮助
    有价值参考资料:
    http://stackoverflow.com/questions/3675144/regex-error-nothing-to-repeat
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics