所以当我遇到这个问题时,我试图在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)
然后我意识到我不会删除125
和ie
之间的点,所以我想我会尝试匹配另一种模式:
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
两次?
答案 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'