具有多种模式的Python Regex Unmatched Groups错误

时间:2014-07-23 19:36:56

标签: python regex

所以当我遇到这个问题时,我试图在SO上回答question。用户基本上有以下字符串:

Adobe.Flash.Player.14.00.125.ie

并想用

替换它
Adobe Flash Player 14.00.125 ie

因此我使用以下re.sub调用来解决此问题:

re.sub("([a-zA-Z])\.([a-zA-Z0-9])",r"\1 \2",str)

然后我意识到我不会删除125ie之间的点,所以我想我会尝试匹配另一种模式:

re.sub("([a-zA-Z])\.([a-zA-Z0-9])|([0-9])\.([a-zA-Z])",r"\1\3 \2\4",str)

当我尝试运行此操作时,出现以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/re.py", line 151, in sub
    return _compile(pattern, 0).sub(repl, string, count)
  File "/usr/lib64/python2.6/re.py", line 278, in filter
    return sre_parse.expand_template(template, match)
  File "/usr/lib64/python2.6/sre_parse.py", line 793, in expand_template
    raise error, "unmatched group"
sre_constants.error: unmatched group

现在,我了解到它之所以抱怨是因为我试图用无与伦比的群体替换这场比赛,但有没有办法解决这个问题,而无需拨打re.sub两次?

1 个答案:

答案 0 :(得分:1)

没有任何捕获组,

>>> import re
>>> s = "Adobe.Flash.Player.14.00.125.ie"
>>> m = re.sub(r'\.(?=[A-Za-z])|(?<!\d)\.', r' ', s)
>>> m
'Adobe Flash Player 14.00.125 ie'