wlyyb521 发表于 2017-5-5 12:38:22

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对“*”匹配处理异常导致语句执行失效,那么如何对"*"等价呢,这个具体要看具体的需求是什么。
    例如本程序中的我需匹配表格中 ”+“ 中间的单词,那么我的作法是:.* 替换成 .*即可,所以对低版本(<2.7.5)python 模块re的处理中,"*" 可以使用以下规律匹配
    *替换成 [你想匹配的正则表达式]*

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

    希望对大家有所帮助
    有价值参考资料:
    http://stackoverflow.com/questions/3675144/regex-error-nothing-to-repeat
页: [1]
查看完整版本: python 在小于2.7.5版本中 re模块出现 nothing to repeat 错误